Там где "analogWrite(ena,HIGH );" - мотор в эту сторону вообще ни как не крутится. Если прописывать это условие и для другого мотора - ПРОВОРОТОВ ВООЩЕ НЕТ! jeka_tm Может я не туда пишу?
Попробовал как Вы сказали совсем ПРОПАЛ задний ход!
Сам то посмотри что я написал, найди такое начало в старом коде, если вставлять где попало конечно не будет ездить
И скинь фото что за механика такая тяжёлая, что такая инерция
А также разберись что делает код, понимания похоже нет
Попробовал как Вы сказали совсем ПРОПАЛ задний ход!
Сам то посмотри что я написал, найди такое начало в старом коде, если вставлять где попало конечно не будет ездить И скинь фото что за механика такая тяжёлая, что такая инерция А также разберись что делает код, понимания похоже нет
Вставил то я код именно туда куда надо! Мы(вернее я) сейчас делаем тормоза на основное движение в перёд-назад. Вставлено для примера в движение назад. И как раз задний ход и пропадает! Пробую вставляю в передний ход - нет переднего! В повороты - нет поворотов!
"понимания похоже нет" - точно! Вот почему и прошу указать именно куда вставить!
Вместо
if (ps2x.Analog(PSS_LY) == 128) analogWrite(ena, 0);
if (ps2x.Analog(PSS_LY) == 128) analogWrite(enb, 0);
Вставьте мой код, а код движения пока не трогай. Получится стояночный тормоз
Вместо if (ps2x.Analog(PSS_LY) == 128) analogWrite(ena, 0); if (ps2x.Analog(PSS_LY) == 128) analogWrite(enb, 0); Вставьте мой код, а код движения пока не трогай. Получится стояночный тормоз
Так? Вот всё полностью .
#include <PS2X_lib.h> //for v1.6
#include <Servo.h>
PS2X ps2x;
int PS2 = 0;
Servo VVservo;
Servo VNservo;
Servo Shoot;
const int in1 = 2; // direction pin 1
const int in2 = 4; // direction pin 2
const int ena = 3; // PWM pin to change speed
const int in3 = 7; // direction pin 1
const int in4 = 1; // direction pin 2
const int enb = 5; // PWM pin to change speed
int fspeed; // forward speed
void setup(){
VVservo.attach(9);
VNservo.attach(6);
Shoot.attach(10);
PS2 = ps2x.config_gamepad(13,11,8,12, true, true); //Настройка выводов: (clock, command, attention, data, true, true)
pinMode(in1, OUTPUT); // connection to L298n
pinMode(in2, OUTPUT); // connection to L298n
pinMode(ena, OUTPUT); // connection to L298n
pinMode(in3, OUTPUT); // connection to L298n
pinMode(in4, OUTPUT); // connection to L298n
pinMode(enb, OUTPUT); // connection to L298n
pinMode(0, OUTPUT); // Лазер
}
void loop(){
ps2x.read_gamepad();
if (ps2x.Analog(PSS_LY) == 128) {
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
analogWrite(ena, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
analogWrite(enb, HIGH);
}
if (ps2x.Analog(PSS_LY) > 128){
fspeed = map(ps2x.Analog(PSS_LY), 129, 255, 0, 255);
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
analogWrite(ena, fspeed);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
analogWrite(enb, fspeed);
}
if (ps2x.Analog(PSS_LY) < 128){
fspeed = map(ps2x.Analog(PSS_LY), 0, 127, 255, 0);
digitalWrite(in1, HIGH);
digitalWrite(in2,LOW );
analogWrite(ena, fspeed);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
analogWrite(enb, fspeed);
}
if (ps2x.Analog(PSS_LX) > 128){
fspeed = map(ps2x.Analog(PSS_LX), 129, 255, 0, 255);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
analogWrite(enb, fspeed);
}
if (ps2x.Analog(PSS_LX) < 128){
fspeed = map(ps2x.Analog(PSS_LX), 0, 127, 255, 0);
digitalWrite(in1,HIGH );
digitalWrite(in2, LOW);
analogWrite(ena, fspeed);
}
delay(10);
}
Тогда проведи тест, залей только тот кусочек кода в loop, и попробуй покрутить колеса. Должно быть сопротивление. Потом отсоедени мотор от драйвера и замкни его контакты и тоже покрути. Разница должна быть конечно, но сопротивление все равно должно быть. И приложи фото мотора с редуктором и колесом, а то сомнения появились
Короче сейчас самый простой вариант это поставить 2 реле которые будут коротить движок в момент остановки, только главное с задержкой относительно драйвера, а то если драйвер еще не выключился, а включится реле, ты закоротишь выход драйвера и он сгорит.
Да и драйвер лучше бы поменять на более приличный, с полевиками на выходе.
Короче самый простой вариант - это правильно дать команду на драйвер! Ибо здесь драйвер прописан через жопу! И это факт! Дело в то, что вот тут
Пример управления двумя моторами при помощи одного джойстика по танковой схеме
*/
#include "GyverMotor.h"
GMotor motorR(DRIVER2WIRE, 2, 3, HIGH);
GMotor motorL(DRIVER2WIRE, 4, 11, HIGH);
// используем оба ШИМа таймера 2 (пины 3 и 11)
// варианты инициализации в зависимости от типа драйвера:
// GMotor motor(DRIVER2WIRE, dig_pin, PWM_pin, (LOW / HIGH) )
// GMotor motor(DRIVER3WIRE, dig_pin_A, dig_pin_B, PWM_pin, (LOW/HIGH) )
// GMotor motor(RELAY2WIRE, dig_pin_A, dig_pin_B, (LOW/HIGH) )
/*
DRIVER2WIRE - двухпроводной драйвер (направление + ШИМ)
DRIVER3WIRE - трёхпроводной драйвер (два пина направления + ШИМ)
RELAY2WIRE - реле в качестве драйвера (два пина направления)
dig_pin, dig_pin_A, dig_pin_B - любой цифровой пин МК
PWM_pin - любой ШИМ пин МК
LOW / HIGH - уровень драйвера. Если при увеличении скорости мотор наоборот тормозит - смени уровень
*/
void setup() {
// ключ на старт!
motorR.setMode(FORWARD);
motorL.setMode(FORWARD);
}
void loop() {
// джойстик на А0 и А1
int signalX = 255 - analogRead(0) / 2;
int signalY = 255 - analogRead(1) / 2;
// преобразуем по танковой схеме
int dutyR = signalY + signalX;
int dutyL = signalY - signalX;
motorR.setSpeed(dutyR);
motorL.setSpeed(dutyL);
delay(10); // задержка просто для "стабильности"
}
как раз тормоза то и работают! Но не соображу как прописать сюда джостик от Сони. Здесь проводной на контакты А0 и А1 - .....
Писал же разбирайся с кодом. Не будет здесь А1 А0, так как эти значения считываются с пульта, и это ps2x.Analog(PSS_LX) и т.д. Эти пины тебе вообще не нужны
Писал же разбирайся с кодом. Не будет здесь А1 А0, так как эти значения считываются с пульта, и это ps2x.Analog(PSS_LX) и т.д. Эти пины тебе вообще не нужны
Нет конечно, прописать условие когда нужно тормозить, и в условие добавить код торможения.
Ушел перекидывать провода и пробою!
Для торможения одной стороны (вторая аналогично):
Вот ещё раз выкладываю скетч :
конечно не туда. надо условие когда мотор должен остановится включить тормоз
например сюда, но этого недостаточно. это будет просто стояночный тормоз, а что бы и на повороте нужно допиливать условия остальные
if (ps2x.Analog(PSS_LY) == 128) { digitalWrite(in1, LOW); digitalWrite(in2, LOW); analogWrite(ena, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, LOW); analogWrite(enb, HIGH); }конечно не туда. надо условие когда мотор должен остановится включить тормоз
например сюда, но этого недостаточно. это будет просто стояночный тормоз, а что бы и на повороте нужно допиливать условия остальные
if (ps2x.Analog(PSS_LY) == 128) { digitalWrite(in1, LOW); digitalWrite(in2, LOW); analogWrite(ena, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, LOW); analogWrite(enb, HIGH); }Есле ещё и так -
- то нет движения не в перёд не назад! Эфекта подтормаживания к стате то ж НЕТ!
Вот моя эл. схема. Всё собрано пин в пин - провод в провод! Работает всё и три сервы и фонарик! Только собрано всё
ARDUINO MEGA 2560....работает но
не тормозит- катится по инерции 20-30см!
конечно не туда. надо условие когда мотор должен остановится включить тормоз
например сюда, но этого недостаточно. это будет просто стояночный тормоз, а что бы и на повороте нужно допиливать условия остальные
if (ps2x.Analog(PSS_LY) == 128) { digitalWrite(in1, LOW); digitalWrite(in2, LOW); analogWrite(ena, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, LOW); analogWrite(enb, HIGH); }Сам то посмотри что я написал, найди такое начало в старом коде, если вставлять где попало конечно не будет ездить
И скинь фото что за механика такая тяжёлая, что такая инерция
А также разберись что делает код, понимания похоже нет
Сейчас сброшу видео
https://youtu.be/TKuRZbeS-CI Вот! Отпускаю стик а шась едет! А должен по уму подтормаживать!
конечно не туда. надо условие когда мотор должен остановится включить тормоз
например сюда, но этого недостаточно. это будет просто стояночный тормоз, а что бы и на повороте нужно допиливать условия остальные
if (ps2x.Analog(PSS_LY) == 128) { digitalWrite(in1, LOW); digitalWrite(in2, LOW); analogWrite(ena, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, LOW); analogWrite(enb, HIGH); }Вставил то я код именно туда куда надо! Мы(вернее я) сейчас делаем тормоза на основное движение в перёд-назад. Вставлено для примера в движение назад. И как раз задний ход и пропадает! Пробую вставляю в передний ход - нет переднего! В повороты - нет поворотов!
"понимания похоже нет" - точно! Вот почему и прошу указать именно куда вставить!
Вместо
if (ps2x.Analog(PSS_LY) == 128) analogWrite(ena, 0);
if (ps2x.Analog(PSS_LY) == 128) analogWrite(enb, 0);
Вставьте мой код, а код движения пока не трогай. Получится стояночный тормоз
Так? Вот всё полностью .
#include <PS2X_lib.h> //for v1.6 #include <Servo.h> PS2X ps2x; int PS2 = 0; Servo VVservo; Servo VNservo; Servo Shoot; const int in1 = 2; // direction pin 1 const int in2 = 4; // direction pin 2 const int ena = 3; // PWM pin to change speed const int in3 = 7; // direction pin 1 const int in4 = 1; // direction pin 2 const int enb = 5; // PWM pin to change speed int fspeed; // forward speed void setup(){ VVservo.attach(9); VNservo.attach(6); Shoot.attach(10); PS2 = ps2x.config_gamepad(13,11,8,12, true, true); //Настройка выводов: (clock, command, attention, data, true, true) pinMode(in1, OUTPUT); // connection to L298n pinMode(in2, OUTPUT); // connection to L298n pinMode(ena, OUTPUT); // connection to L298n pinMode(in3, OUTPUT); // connection to L298n pinMode(in4, OUTPUT); // connection to L298n pinMode(enb, OUTPUT); // connection to L298n pinMode(0, OUTPUT); // Лазер } void loop(){ ps2x.read_gamepad(); if (ps2x.Analog(PSS_LY) == 128) { digitalWrite(in1, LOW); digitalWrite(in2, LOW); analogWrite(ena, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, LOW); analogWrite(enb, HIGH); } if (ps2x.Analog(PSS_LY) > 128){ fspeed = map(ps2x.Analog(PSS_LY), 129, 255, 0, 255); digitalWrite(in1, LOW); digitalWrite(in2, HIGH); analogWrite(ena, fspeed); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); analogWrite(enb, fspeed); } if (ps2x.Analog(PSS_LY) < 128){ fspeed = map(ps2x.Analog(PSS_LY), 0, 127, 255, 0); digitalWrite(in1, HIGH); digitalWrite(in2,LOW ); analogWrite(ena, fspeed); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); analogWrite(enb, fspeed); } if (ps2x.Analog(PSS_LX) > 128){ fspeed = map(ps2x.Analog(PSS_LX), 129, 255, 0, 255); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); analogWrite(enb, fspeed); } if (ps2x.Analog(PSS_LX) < 128){ fspeed = map(ps2x.Analog(PSS_LX), 0, 127, 255, 0); digitalWrite(in1,HIGH ); digitalWrite(in2, LOW); analogWrite(ena, fspeed); } delay(10); }Вот вставленный кусок -.....изменений нет! Всё по прежнему!
То есть если разогнать твою тележку, а потом отпустить джойстик он не останавливается?
Тогда проведи тест, залей только тот кусочек кода в loop, и попробуй покрутить колеса. Должно быть сопротивление. Потом отсоедени мотор от драйвера и замкни его контакты и тоже покрути. Разница должна быть конечно, но сопротивление все равно должно быть. И приложи фото мотора с редуктором и колесом, а то сомнения появились
приложи фото мотора с редуктором и колесом, а то сомнения появились
Ща фотку скину! Моторы без маркировки - хотя заказывал что б была. Сомнения какого рода?
Покупал тут https://aliexpress.ru/item/Metal-Tank-Model-Robot-Tracked-Car-Chassis-Diy-Track-Teaching-Crawler-Caterpillar-Platform-Compatible-With-Arduino/32879672132.html?spm=a2g0s.9042311.0.0.677833ednxrGfX&_ga=2.199400238.1891236730.1612702837-1241516693.1590831604
и попробуй покрутить колеса.Замкнул провода(обмотки якоря) как и положено - тормозят.
#include <PS2X_lib.h> //for v1.6 #include <Servo.h> PS2X ps2x; int PS2 = 0; Servo VVservo; Servo VNservo; Servo Shoot; const int in1 = 2; // direction pin 1 const int in2 = 4; // direction pin 2 const int ena = 3; // PWM pin to change speed const int in3 = 7; // direction pin 1 const int in4 = 1; // direction pin 2 const int enb = 5; // PWM pin to change speed int fspeed; // forward speed void setup(){ VVservo.attach(9); VNservo.attach(6); Shoot.attach(10); PS2 = ps2x.config_gamepad(13,11,8,12, true, true); //Настройка выводов: (clock, command, attention, data, true, true) pinMode(in1, OUTPUT); // connection to L298n pinMode(in2, OUTPUT); // connection to L298n pinMode(ena, OUTPUT); // connection to L298n pinMode(in3, OUTPUT); // connection to L298n pinMode(in4, OUTPUT); // connection to L298n pinMode(enb, OUTPUT); // connection to L298n pinMode(0, OUTPUT); // Лазер } void loop(){ ps2x.read_gamepad(); digitalWrite(1, LOW); if (ps2x.Analog(PSS_LY) == 128) { digitalWrite(in1, LOW); digitalWrite(in2, LOW); analogWrite(ena, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, LOW); analogWrite(enb, HIGH); }Не тормозят! Крутятся свободно!
Короче сейчас самый простой вариант это поставить 2 реле которые будут коротить движок в момент остановки, только главное с задержкой относительно драйвера, а то если драйвер еще не выключился, а включится реле, ты закоротишь выход драйвера и он сгорит.
Да и драйвер лучше бы поменять на более приличный, с полевиками на выходе.
Короче самый простой вариант - это правильно дать команду на драйвер! Ибо здесь драйвер прописан через жопу! И это факт! Дело в то, что вот тут
Пример управления двумя моторами при помощи одного джойстика по танковой схеме */ #include "GyverMotor.h" GMotor motorR(DRIVER2WIRE, 2, 3, HIGH); GMotor motorL(DRIVER2WIRE, 4, 11, HIGH); // используем оба ШИМа таймера 2 (пины 3 и 11) // варианты инициализации в зависимости от типа драйвера: // GMotor motor(DRIVER2WIRE, dig_pin, PWM_pin, (LOW / HIGH) ) // GMotor motor(DRIVER3WIRE, dig_pin_A, dig_pin_B, PWM_pin, (LOW/HIGH) ) // GMotor motor(RELAY2WIRE, dig_pin_A, dig_pin_B, (LOW/HIGH) ) /* DRIVER2WIRE - двухпроводной драйвер (направление + ШИМ) DRIVER3WIRE - трёхпроводной драйвер (два пина направления + ШИМ) RELAY2WIRE - реле в качестве драйвера (два пина направления) dig_pin, dig_pin_A, dig_pin_B - любой цифровой пин МК PWM_pin - любой ШИМ пин МК LOW / HIGH - уровень драйвера. Если при увеличении скорости мотор наоборот тормозит - смени уровень */ void setup() { // ключ на старт! motorR.setMode(FORWARD); motorL.setMode(FORWARD); } void loop() { // джойстик на А0 и А1 int signalX = 255 - analogRead(0) / 2; int signalY = 255 - analogRead(1) / 2; // преобразуем по танковой схеме int dutyR = signalY + signalX; int dutyL = signalY - signalX; motorR.setSpeed(dutyR); motorL.setSpeed(dutyL); delay(10); // задержка просто для "стабильности" }как раз тормоза то и работают! Но не соображу как прописать сюда джостик от Сони. Здесь проводной на контакты А0 и А1 - .....
Если ты чем не можешь пользоваться это ведь не значит что сделано через жопу?
На первый взгляд просто поменяй
на это
ну и пины, инициализации и т.д. пропиши
Прописал - так? Какие контакты указывать в место А0 и А1???
#include "GyverMotor.h" GMotor motorR(DRIVER2WIRE, 2, 3, HIGH); GMotor motorL(DRIVER2WIRE, 4, 5, HIGH); // используем оба ШИМа таймера 2 (пины 3 и 5) // варианты инициализации в зависимости от типа драйвера: // GMotor motor(DRIVER2WIRE, dig_pin, PWM_pin, (LOW / HIGH) ) /* DRIVER2WIRE - двухпроводной драйвер (направление + ШИМ) DRIVER3WIRE - трёхпроводной драйвер (два пина направления + ШИМ) RELAY2WIRE - реле в качестве драйвера (два пина направления) dig_pin, dig_pin_A, dig_pin_B - любой цифровой пин МК PWM_pin - любой ШИМ пин МК LOW / HIGH - уровень драйвера. Если при увеличении скорости мотор наоборот тормозит - смени уровень */ void setup() { PS2 = ps2x.config_gamepad(13,11,8,12, true, true); // ключ на старт! motorR.setMode(FORWARD); motorL.setMode(FORWARD); } void loop() { ps2x.read_gamepad(); // джойстик на А0 и А1 ???-ЗДЕСЬ ЧЕГО - КАКИЕ КОНТАКТЫ УКАЗЫВАТЬ ??? int signalX = 255 - ps2x.Analog(PSS_LX)*2; int signalY = 255 - ps2x.Analog(PSS_LY)*2; // преобразуем по танковой схеме int dutyR = signalY + signalX; int dutyL = signalY - signalX; motorR.setSpeed(dutyR); motorL.setSpeed(dutyL); delay(10); // задержка просто для "стабильности" }Вот оригинал
#include "GyverMotor.h" GMotor motorR(DRIVER2WIRE, 2, 3, HIGH); GMotor motorL(DRIVER2WIRE, 4, 5, HIGH); // используем оба ШИМа таймера 2 (пины 3 и 5) // варианты инициализации в зависимости от типа драйвера: // GMotor motor(DRIVER2WIRE, dig_pin, PWM_pin, (LOW / HIGH) ) /* DRIVER2WIRE - двухпроводной драйвер (направление + ШИМ) DRIVER3WIRE - трёхпроводной драйвер (два пина направления + ШИМ) RELAY2WIRE - реле в качестве драйвера (два пина направления) dig_pin, dig_pin_A, dig_pin_B - любой цифровой пин МК PWM_pin - любой ШИМ пин МК LOW / HIGH - уровень драйвера. Если при увеличении скорости мотор наоборот тормозит - смени уровень */ void setup() { // ключ на старт! motorR.setMode(FORWARD); motorL.setMode(FORWARD); } void loop() { // джойстик на А0 и А1 int signalX = 255 - analogRead(0) / 2; int signalY = 255 - analogRead(1) / 2; // преобразуем по танковой схеме int dutyR = signalY + signalX; int dutyL = signalY - signalX; motorR.setSpeed(dutyR); motorL.setSpeed(dutyL); delay(10); // задержка просто для "стабильности" }Писал же разбирайся с кодом. Не будет здесь А1 А0, так как эти значения считываются с пульта, и это ps2x.Analog(PSS_LX) и т.д. Эти пины тебе вообще не нужны
Писал же разбирайся с кодом. Не будет здесь А1 А0, так как эти значения считываются с пульта, и это ps2x.Analog(PSS_LX) и т.д. Эти пины тебе вообще не нужны
ОК! Так яж и спросил!
Короче нет у меня понимания чего и зачем! Вот такая фигня.....
А вот моя писанина!
#include <PS2X_lib.h> #include "GyverMotor.h" GMotor motorR(DRIVER2WIRE, 2, 4, HIGH); GMotor motorL(DRIVER2WIRE, 4, 2, HIGH); // используем оба ШИМа таймера 2 (пины 3 и 11) // варианты инициализации в зависимости от типа драйвера: // GMotor motor(DRIVER2WIRE, dig_pin, PWM_pin, (LOW / HIGH) ) /* DRIVER2WIRE - двухпроводной драйвер (направление + ШИМ) dig_pin, dig_pin_A, dig_pin_B - любой цифровой пин МК PWM_pin - любой ШИМ пин МК LOW / HIGH - уровень драйвера. Если при увеличении скорости мотор наоборот тормозит - смени уровень */ void setup() { PS2 = ps2x.config_gamepad(13,11,8,12, true, true); // ключ на старт! motorR.setMode(FORWARD); motorL.setMode(FORWARD); } void loop() { int signalX = 255 - ps2x.Analog(PSS_LX)*2; int signalY = 255 - ps2x.Analog(PSS_LY)*2; // преобразуем по танковой схеме int dutyR = signalY + signalX; int dutyL = signalY - signalX; motorR.setSpeed(dutyR); motorL.setSpeed(dutyL); delay(10); // задержка просто для "стабильности" }Не прописывается джойстик!
И так делал!
В коде этого не было, а без этого работать не будет
Вот так пульт прописался - но по факту приёмник( Ардуино) не видит передатчик - на пульте часто мигает зелёная "лампа" - нет соединения!
#include <PS2X_lib.h> PS2X ps2x; int PS2 = 0; void setup(){ PS2 = ps2x.config_gamepad(13,11,8,12, true, true); //Настройка выводов: (clock, command, attention, data, true, true) } void loop(){ }В коде этого не было, а без этого работать не будет
Залей точно рабочий код, проверь. Потом удалишь лишнее, и добавишь драйвера и т.д.
Ща!
В коде этого не было, а без этого работать не будет
Может контакт какой отошел, чтобы исключить залей точно рабочий код.
Залил это - работает.
#include <PS2X_lib.h> //for v1.6 #include <Servo.h> PS2X ps2x; int PS2 = 0; Servo VVservo; Servo VNservo; Servo Shoot; const int in1 = 2; // direction pin 1 const int in2 = 4; // direction pin 2 const int ena = 3; // PWM pin to change speed const int in3 = 7; // direction pin 1 const int in4 = 1; // direction pin 2 const int enb = 5; // PWM pin to change speed int fspeed; // forward speed void setup(){ VVservo.attach(9); VNservo.attach(6); Shoot.attach(10); PS2 = ps2x.config_gamepad(13,11,8,12, true, true); //Настройка выводов: (clock, command, attention, data, true, true) pinMode(in1, OUTPUT); // connection to L298n pinMode(in2, OUTPUT); // connection to L298n pinMode(ena, OUTPUT); // connection to L298n pinMode(in3, OUTPUT); // connection to L298n pinMode(in4, OUTPUT); // connection to L298n pinMode(enb, OUTPUT); // connection to L298n pinMode(0, OUTPUT); // Лазер } void loop(){ ps2x.read_gamepad(); digitalWrite(1, LOW); if (ps2x.Analog(PSS_LY) == 128) analogWrite(ena, 0); if (ps2x.Analog(PSS_LY) == 128) analogWrite(enb, 0); if (ps2x.Analog(PSS_LY) > 128){ fspeed = map(ps2x.Analog(PSS_LY), 129, 255, 0, 255); digitalWrite(in1, LOW); digitalWrite(in2, HIGH); analogWrite(ena, fspeed); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); analogWrite(enb, fspeed); } if (ps2x.Analog(PSS_LY) < 128){ fspeed = map(ps2x.Analog(PSS_LY), 0, 127, 255, 0); digitalWrite(in1, HIGH); digitalWrite(in2,LOW ); analogWrite(ena, fspeed); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); analogWrite(enb, fspeed); } if (ps2x.Analog(PSS_LX) > 128){ fspeed = map(ps2x.Analog(PSS_LX), 129, 255, 0, 255); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); analogWrite(enb, fspeed); } if (ps2x.Analog(PSS_LX) < 128){ fspeed = map(ps2x.Analog(PSS_LX), 0, 127, 255, 0); digitalWrite(in1,HIGH ); digitalWrite(in2, LOW); analogWrite(ena, fspeed); } VVservo.write(map(ps2x.Analog(PSS_RX), 0, 255, 170, 10)); VNservo.write(map(ps2x.Analog(PSS_RY), 0, 255, 170, 10)); if(ps2x.ButtonPressed(PSB_R1)) { Shoot.write(45); } if(ps2x.ButtonPressed(PSB_R2)) { Shoot.write(0); } if(ps2x.ButtonPressed(PSB_L1)) digitalWrite(0, HIGH); if(ps2x.ButtonPressed(PSB_L2)) digitalWrite(0, LOW); delay(50); }Теперь удаляю лишнее и оставляю только пульт!
Есть ошибка!Ща только "запятые" проверю!
Вот в таком виде РАБОТАЕТ!
#include <PS2X_lib.h> //for v1.6 PS2X ps2x; int PS2 = 0; void setup(){ PS2 = ps2x.config_gamepad(13,11,8,12, true, true); //Настройка выводов: (clock, command, attention, data, true, true) } void loop(){ ps2x.read_gamepad(); { } delay(50); }Я в "запятых"(в синтаксисе) запутался! Теперь пробовать библиотеку вставлять? Назначать пины?
Да добавляй моторы
Добавил!
Делаю по этой схеме - пин в пин, номер в номер.
Да делай) А драйвер лучше поменяй, ты не представляешь сколько в мощности на нем потеряешь, а также он будет сильно греться
Да делай) А драйвер лучше поменяй, ты не представляешь сколько в мощности на нем потеряешь, а также он будет сильно греться
Смотри - так?
#include <GyverMotor.h> #include <PS2X_lib.h> //for v1.6 PS2X ps2x; int PS2 = 0; GMotor motorR(DRIVER2WIRE, 2, 4, HIGH); GMotor motorL(DRIVER2WIRE, 4, 2, HIGH); // используем оба ШИМа таймера 2 (пины 3 и 11) // варианты инициализации в зависимости от типа драйвера: // GMotor motor(DRIVER2WIRE, dig_pin, PWM_pin, (LOW / HIGH) ) /* DRIVER2WIRE - двухпроводной драйвер (направление + ШИМ) DRIVER3WIRE - трёхпроводной драйвер (два пина направления + ШИМ) RELAY2WIRE - реле в качестве драйвера (два пина направления) dig_pin, dig_pin_A, dig_pin_B - любой цифровой пин МК PWM_pin - любой ШИМ пин МК LOW / HIGH - уровень драйвера. Если при увеличении скорости мотор наоборот тормозит - смени уровень */ void setup(){// используем оба ШИМа таймера 2 (пины 3 и 11) Мне наверное в место 3 - прописать 4 и 3?
Практически победили!Крутятся! И тормозят! Но только во всех направлениях джостика либо правая - либо левая и ..... по одной!
#include <GyverMotor.h> #include <PS2X_lib.h> //for v1.6 PS2X ps2x; int PS2 = 0; GMotor motorR(DRIVER2WIRE, 2, 4, HIGH); GMotor motorL(DRIVER2WIRE, 4, 2, HIGH); // используем оба ШИМа таймера 2 (пины 4 и 13) // варианты инициализации в зависимости от типа драйвера: // GMotor motor(DRIVER2WIRE, dig_pin, PWM_pin, (LOW / HIGH) ) /* DRIVER2WIRE - двухпроводной драйвер (направление + ШИМ) DRIVER3WIRE - трёхпроводной драйвер (два пина направления + ШИМ) RELAY2WIRE - реле в качестве драйвера (два пина направления) dig_pin, dig_pin_A, dig_pin_B - любой цифровой пин МК PWM_pin - любой ШИМ пин МК LOW / HIGH - уровень драйвера. Если при увеличении скорости мотор наоборот тормозит - смени уровень */ void setup(){ motorR.setMode(FORWARD); motorL.setMode(FORWARD); PS2 = ps2x.config_gamepad(13,11,8,12, true, true); //Настройка выводов: (clock, command, attention, data, true, true) } void loop(){ ps2x.read_gamepad(); int signalX = 255 - ps2x.Analog(PSS_LX)*2; int signalY = 255 - ps2x.Analog(PSS_LY)*2; int dutyR = signalY + signalX; int dutyL = signalY - signalX; motorR.setSpeed(dutyR); motorL.setSpeed(dutyL); { } delay(50); }А по уму должны крутиться в разные стороны!