два моторчика и джойстик PS2

lekha777
lekha777 аватар
Offline
Зарегистрирован: 19.04.2016

Доброго времени суток! совсем недавно столкнулся с ардуинкой) собрал машинку по одному видео) всё бы нечего надо поменять управление чтоб левый аналоговый джостик управлял одним двигателем(вперед- назад) а правый вторым двигателем (вперед назад)вот код:

#include <PS2X_lib.h>  //for v1.6
PS2X ps2x;
int PS2 = 0; 
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(){
  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
}
void loop(){
  ps2x.read_gamepad();
     
  digitalWrite(1, LOW);
  if (ps2x.Analog(PSS_RY) == 128) analogWrite(ena, 0);
  if (ps2x.Analog(PSS_RY) == 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_RX) > 128){
    fspeed = map(ps2x.Analog(PSS_RX), 129, 255, 0, 255);
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
    analogWrite(ena, fspeed);
       
  }
  
    
  if (ps2x.Analog(PSS_RX) < 128){
    fspeed = map(ps2x.Analog(PSS_RX), 0, 127, 255, 0);
 
    
    digitalWrite(in3, LOW);
    digitalWrite(in4, HIGH);
    analogWrite(enb, fspeed);
   
  }
   delay(50);
}
заранее спасибо)))))
jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013
#include <PS2X_lib.h>  //for v1.6
PS2X ps2x;
int PS2 = 0; 

#define  in1  2    // direction pin 1
#define  in2  4    // direction pin 2
#define  ena  3    // PWM pin to change speed
#define  in3  7    // direction pin 1
#define  in4  1    // direction pin 2
#define  enb  5    // PWM pin to change speed
 
byte L_speed;      // forward speed 
byte R_speed;      // forward speed 
 
void setup(){
  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
}
void loop(){
  ps2x.read_gamepad();
     
  //digitalWrite(1, LOW); непонятно зачем эта строка
  if (ps2x.Analog(PSS_LY) == 128) analogWrite(ena, 0);
  if (ps2x.Analog(PSS_RY) == 128) analogWrite(enb, 0);
  
 //==========================================================левый мотор
  if (ps2x.Analog(PSS_LY) > 128){
    L_speed = ps2x.Analog(PSS_LY)*2-255;
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
    analogWrite(ena, L_speed);
  }
  if (ps2x.Analog(PSS_LY) < 128){
    L_speed = 255-ps2x.Analog(PSS_LY)*2;
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
    analogWrite(ena, L_speed);
  }
  
  //==========================================================правый мотор
  if (ps2x.Analog(PSS_RY) > 128){
    R_speed = ps2x.Analog(PSS_RY)*2-255;
    digitalWrite(in3, LOW);
    digitalWrite(in4, HIGH);
    analogWrite(enb, R_speed);
  }
  if (ps2x.Analog(PSS_RY) < 128){
    R_speed = 255-ps2x.Analog(PSS_RY)*2;
    digitalWrite(in3, HIGH);
    digitalWrite(in4, LOW);
    analogWrite(enb, R_speed);
  }
   delay(50);
}

 

lekha777
lekha777 аватар
Offline
Зарегистрирован: 19.04.2016

Спасибо))) только вотпо отдельности левый и правый ездят только вперед.  При нажатии вниз и вверх, можно это както поправить)?

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

зря ты использовал 1 и 2 пин, много других свободных

lekha777
lekha777 аватар
Offline
Зарегистрирован: 19.04.2016

по чужой схеме собирал,

я еще чайник в этих делах

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

так поменяй пины, 5 и 9 строка. провода перекинуть не забудь

lekha777
lekha777 аватар
Offline
Зарегистрирован: 19.04.2016

поменял in1 = 10;in4 = 6

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

и ничего не изменилось? давай больше информации, или сам разбирайся если думаешь что я экстрасенс

lekha777
lekha777 аватар
Offline
Зарегистрирован: 19.04.2016

нечего не изменилось, совсем.

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

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

lekha777
lekha777 аватар
Offline
Зарегистрирован: 19.04.2016

ок

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

в конце же ездит взад вперед

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013
#include <PS2X_lib.h>  //for v1.6
PS2X ps2x;
int PS2 = 0; 

#define  in1  10   // direction pin 1
#define  in2  4    // direction pin 2
#define  ena  3    // PWM pin to change speed
#define  in3  7    // direction pin 1
#define  in4  6    // direction pin 2
#define  enb  5    // PWM pin to change speed
 
byte L_speed;      // forward speed 
byte R_speed;      // forward speed 
 
void setup(){
  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
}
void loop(){
  ps2x.read_gamepad(false, false);
     
  //digitalWrite(1, LOW); непонятно зачем эта строка
  if (ps2x.Analog(PSS_LY) == 128) analogWrite(ena, 0);
  if (ps2x.Analog(PSS_RY) == 128) analogWrite(enb, 0);
  
 //==========================================================левый мотор
  if (ps2x.Analog(PSS_LY) > 128){
    L_speed = ps2x.Analog(PSS_LY)*2-255;
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
    analogWrite(ena, L_speed);
  }
  if (ps2x.Analog(PSS_LY) < 128){
    L_speed = 255-ps2x.Analog(PSS_LY)*2;
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
    analogWrite(ena, L_speed);
  }
  
  //==========================================================правый мотор
  if (ps2x.Analog(PSS_RY) > 128){
    R_speed = ps2x.Analog(PSS_RY)*2-255;
    digitalWrite(in3, LOW);
    digitalWrite(in4, HIGH);
    analogWrite(enb, R_speed);
  }
  if (ps2x.Analog(PSS_RY) < 128){
    R_speed = 255-ps2x.Analog(PSS_RY)*2;
    digitalWrite(in3, HIGH);
    digitalWrite(in4, LOW);
    analogWrite(enb, R_speed);
  }
   delay(50);
}

 

lekha777
lekha777 аватар
Offline
Зарегистрирован: 19.04.2016

если двумя то да, а хотелось бы по отдельности

lekha777
lekha777 аватар
Offline
Зарегистрирован: 19.04.2016

джойстиками*

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

ты последний код пробовал?

lekha777
lekha777 аватар
Offline
Зарегистрирован: 19.04.2016

да, все по прежнему

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

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

у тебя библиотека какой версии? v1.8?

#include <PS2X_lib.h>  //for v1.6
PS2X ps2x;
int PS2 = 0; 

#define  in1  10   // direction pin 1
#define  in2  4    // direction pin 2
#define  ena  3    // PWM pin to change speed
#define  in3  7    // direction pin 1
#define  in4  6    // direction pin 2
#define  enb  5    // PWM pin to change speed
 
byte L_speed;      // forward speed 
byte R_speed;      // forward speed 
byte analogL;
byte analogR;
 
void setup(){
  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
  Serial.begin(9600);
}
void loop(){
  ps2x.read_gamepad(false, false);
  analogL= ps2x.Analog(PSS_LY); 
  analogR= ps2x.Analog(PSS_RY); 
  Serial.print(analogL);
  Serial.print("   ");
  Serial.println(analogR);
  
  //==========================================================левый мотор
  if (analogL == 128) analogWrite(ena, 0);
  if (analogL > 128){
    L_speed = (analogL*2)-255;
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
    analogWrite(ena, L_speed);
  }
  if (analogL < 128){
    L_speed = 255-(analogL*2);
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
    analogWrite(ena, L_speed);
  }
  
  
  //==========================================================правый мотор
  if (analogR == 128) analogWrite(enb, 0);
  if (analogR > 128){
    R_speed = (analogR*2)-255;
    digitalWrite(in3, LOW);
    digitalWrite(in4, HIGH);
    analogWrite(enb, R_speed);
  }
  if (analogR < 128){
    R_speed = 255-(analogR*2);
    digitalWrite(in3, HIGH);
    digitalWrite(in4, LOW);
    analogWrite(enb, R_speed);
  }
   delay(50);
}

открой терминал и посмотри правильно ли все цифры идут

lekha777
lekha777 аватар
Offline
Зарегистрирован: 19.04.2016

библиотека да 1,8. да все так идет, этот код тоже попробовал все так же.

lekha777
lekha777 аватар
Offline
Зарегистрирован: 19.04.2016

а если попробовать чтоб кнопками управлять? вверх-вниз\левый, треугольник-крест\правый? 

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

наркоман штоле?))))

ну хз почему

lekha777
lekha777 аватар
Offline
Зарегистрирован: 19.04.2016

не я так ради прикола поставил)))))

lekha777
lekha777 аватар
Offline
Зарегистрирован: 19.04.2016

получиться кнопками?

 

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

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

lekha777
lekha777 аватар
Offline
Зарегистрирован: 19.04.2016

прикольно, тоже на PS2?

 

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

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

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

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