Танк управляемый джойстиком PS-2

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

jeka_tm пишет:

Нет конечно, прописать условие когда нужно тормозить, и в условие добавить код торможения.

Да! Да! Посмотрел скетч и понял куда! Ща буду пробовать - отпишусь! Спасибо! 

Ушел перекидывать провода и пробою!

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

jeka_tm пишет:

Для торможения одной стороны (вторая аналогично):

digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
analogWrite(ena, HIGH);

 

И не фига! Либо я туплю и делаю что то не так - либо.....   Вот куда я вставляю - пример кода :

 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,LOW );
    digitalWrite(in2, LOW);
    analogWrite(ena,HIGH );
   
 
 
 
Там где  "analogWrite(ena,HIGH );" - мотор в эту сторону вообще ни как не крутится. Если прописывать это условие и для другого мотора - ПРОВОРОТОВ ВООЩЕ НЕТ! jeka_tm Может я не туда пишу? 
oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

Вот ещё раз выкладываю скетч :

 

#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);
   
  }
  
    
  delay(10);
 
 
  
  
  
 
 
 
 
Не могли бы Вы jeka_tm точно указать куда надо вставить данные Вами изменения - что б всё заработало!

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

конечно не туда. надо условие когда мотор должен остановится включить тормоз

например сюда, но этого недостаточно. это будет просто стояночный тормоз, а что бы и на повороте нужно допиливать условия остальные

if (ps2x.Analog(PSS_LY) == 128) {
	digitalWrite(in1, LOW);
	digitalWrite(in2, LOW);
	analogWrite(ena, HIGH);
        digitalWrite(in3, LOW);
	digitalWrite(in4, LOW);
	analogWrite(enb, HIGH);

}  

 

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

jeka_tm пишет:

конечно не туда. надо условие когда мотор должен остановится включить тормоз

например сюда, но этого недостаточно. это будет просто стояночный тормоз, а что бы и на повороте нужно допиливать условия остальные

if (ps2x.Analog(PSS_LY) == 128) {
	digitalWrite(in1, LOW);
	digitalWrite(in2, LOW);
	analogWrite(ena, HIGH);
        digitalWrite(in3, LOW);
	digitalWrite(in4, LOW);
	analogWrite(enb, HIGH);

}  

 

Попробовал как Вы сказали совсем ПРОПАЛ задний ход!

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

Есле ещё и так -

 - то нет движения не в перёд не назад! Эфекта подтормаживания к стате то ж НЕТ!

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

Вот моя эл. схема. Всё собрано пин в пин - провод в провод! Работает всё и три сервы и фонарик! Только собрано всё 

ARDUINO MEGA 2560....работает но

 

 не тормозит- катится по инерции 20-30см!

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

oboltus-РУ пишет:

jeka_tm пишет:

конечно не туда. надо условие когда мотор должен остановится включить тормоз

например сюда, но этого недостаточно. это будет просто стояночный тормоз, а что бы и на повороте нужно допиливать условия остальные

if (ps2x.Analog(PSS_LY) == 128) {
	digitalWrite(in1, LOW);
	digitalWrite(in2, LOW);
	analogWrite(ena, HIGH);
        digitalWrite(in3, LOW);
	digitalWrite(in4, LOW);
	analogWrite(enb, HIGH);

}  

 

Попробовал как Вы сказали совсем ПРОПАЛ задний ход!


Сам то посмотри что я написал, найди такое начало в старом коде, если вставлять где попало конечно не будет ездить
И скинь фото что за механика такая тяжёлая, что такая инерция
А также разберись что делает код, понимания похоже нет

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

Сейчас сброшу видео

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

https://youtu.be/TKuRZbeS-CI Вот! Отпускаю стик а шась едет! А должен по уму подтормаживать!

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

jeka_tm пишет:
oboltus-РУ пишет:

jeka_tm пишет:

конечно не туда. надо условие когда мотор должен остановится включить тормоз

например сюда, но этого недостаточно. это будет просто стояночный тормоз, а что бы и на повороте нужно допиливать условия остальные

if (ps2x.Analog(PSS_LY) == 128) {
	digitalWrite(in1, LOW);
	digitalWrite(in2, LOW);
	analogWrite(ena, HIGH);
        digitalWrite(in3, LOW);
	digitalWrite(in4, LOW);
	analogWrite(enb, HIGH);

}  

 

Попробовал как Вы сказали совсем ПРОПАЛ задний ход!

Сам то посмотри что я написал, найди такое начало в старом коде, если вставлять где попало конечно не будет ездить И скинь фото что за механика такая тяжёлая, что такая инерция А также разберись что делает код, понимания похоже нет

 

 

 

 Вставил то я код именно туда куда надо! Мы(вернее я) сейчас делаем тормоза на основное движение в перёд-назад. Вставлено для примера в движение назад. И как раз задний ход и пропадает! Пробую вставляю в передний ход - нет переднего! В повороты - нет поворотов!

"понимания похоже нет" - точно! Вот почему и прошу указать именно куда вставить!

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Вместо
if (ps2x.Analog(PSS_LY) == 128) analogWrite(ena, 0);
if (ps2x.Analog(PSS_LY) == 128) analogWrite(enb, 0);
Вставьте мой код, а код движения пока не трогай. Получится стояночный тормоз

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

jeka_tm пишет:
Вместо 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);


 
  
  
  

} 

 

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

Вот вставленный кусок -.....изменений нет! Всё по прежнему!

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);
 
  }
  
jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

То есть если разогнать твою тележку, а потом отпустить джойстик он не останавливается?

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

jeka_tm пишет:
То есть если разогнать твою тележку, а потом отпустить джойстик он не останавливается?
Именно ТАК! Движется по инерции!

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Тогда проведи тест, залей только тот кусочек кода в loop, и попробуй покрутить колеса. Должно быть сопротивление. Потом отсоедени мотор от драйвера и замкни его контакты и тоже покрути. Разница должна быть конечно, но сопротивление все равно должно быть. И приложи фото мотора с редуктором и колесом, а то сомнения появились

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

приложи фото мотора с редуктором и колесом, а то сомнения появились 

Ща фотку скину! Моторы без маркировки - хотя заказывал что б была. Сомнения какого рода?

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021
oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

и попробуй покрутить колеса.Замкнул провода(обмотки якоря) как и положено - тормозят.

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

  
 #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);

 

}

Не тормозят! Крутятся свободно!

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Короче сейчас самый простой вариант это поставить 2 реле которые будут коротить движок в момент остановки, только главное с задержкой относительно драйвера, а то если драйвер еще не выключился, а включится реле, ты закоротишь выход драйвера и он сгорит.

Да и драйвер лучше бы поменять на более приличный, с полевиками на выходе.

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

Короче самый простой вариант - это правильно дать команду на драйвер! Ибо здесь драйвер прописан через жопу! И это факт! Дело в то, что вот тут 

 Пример управления двумя моторами при помощи одного джойстика по танковой схеме
*/
#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 - .....

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Если ты чем не можешь пользоваться это ведь не значит что сделано через жопу?

На первый взгляд просто поменяй 

int signalX = 255 - analogRead(0) / 2;
int signalY = 255 - analogRead(1) / 2;

на это

int signalX = 255 - ps2x.Analog(PSS_LX)*2;
int signalY = 255 - ps2x.Analog(PSS_LY)*2;

ну и пины, инициализации и т.д. пропиши

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

Прописал - так? Какие контакты указывать в место А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);  // задержка просто для "стабильности"
}
  

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Писал же разбирайся с кодом. Не будет здесь А1 А0, так как эти значения считываются с пульта, и это ps2x.Analog(PSS_LX) и т.д. Эти пины тебе вообще не нужны

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

jeka_tm пишет:

Писал же разбирайся с кодом. Не будет здесь А1 А0, так как эти значения считываются с пульта, и это ps2x.Analog(PSS_LX) и т.д. Эти пины тебе вообще не нужны


ОК! Так яж и спросил!

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

Короче нет у меня понимания чего и зачем! Вот такая фигня.....

А вот моя писанина!

#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);  // задержка просто для "стабильности"
}

Не прописывается джойстик!

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013
PS2X ps2x;
int PS2 = 0;
oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

И так делал!

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

В коде этого не было, а без этого работать не будет

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

Вот так пульт прописался - но по факту приёмник( Ардуино) не видит передатчик - на пульте часто мигает зелёная "лампа" - нет соединения!

#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(){
 
}

 

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

jeka_tm пишет:

В коде этого не было, а без этого работать не будет

Я не сделал именно этот скрин - но подставлял(честное слово!).

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Залей точно рабочий код, проверь. Потом удалишь лишнее, и добавишь драйвера и т.д.

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

Ща!

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

oboltus-РУ пишет:

jeka_tm пишет:

В коде этого не было, а без этого работать не будет

Я не сделал именно этот скрин - но подставлял(честное слово!).

Может контакт какой отошел, чтобы исключить залей точно рабочий код.

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

Залил это - работает.

#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);

}    

 

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

Теперь удаляю лишнее и оставляю только пульт!

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

Есть ошибка!Ща только "запятые" проверю!

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

Вот в таком виде РАБОТАЕТ!

#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);

   
  

}    

 

Я в "запятых"(в синтаксисе) запутался! Теперь пробовать библиотеку вставлять? Назначать пины?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Да добавляй моторы

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

Добавил!

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

Делаю по этой схеме - пин в пин, номер в номер.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Да делай) А драйвер лучше поменяй, ты не представляешь сколько в мощности на нем потеряешь, а также он будет сильно греться

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

jeka_tm пишет:

Да делай) А драйвер лучше поменяй, ты не представляешь сколько в мощности на нем потеряешь, а также он будет сильно греться

Это дело трерье!

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

Смотри - так?

#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(){
  

 

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

// используем оба ШИМа таймера 2 (пины 3 и 11) Мне наверное в место 3 - прописать 4 и 3?

oboltus-РУ
Offline
Зарегистрирован: 04.02.2021

Практически победили!Крутятся! И тормозят! Но только во всех направлениях джостика  либо правая - либо левая и ..... по одной! 

#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);

   
  

}    

А по уму должны крутиться в разные стороны!