два моторчика и джойстик PS2
- Войдите на сайт для отправки комментариев
Втр, 19/04/2016 - 07:24
Доброго времени суток! совсем недавно столкнулся с ардуинкой) собрал машинку по одному видео) всё бы нечего надо поменять управление чтоб левый аналоговый джостик управлял одним двигателем(вперед- назад) а правый вторым двигателем (вперед назад)вот код:
#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);
}
заранее спасибо)))))
#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); }Спасибо))) только вотпо отдельности левый и правый ездят только вперед. При нажатии вниз и вверх, можно это както поправить)?
зря ты использовал 1 и 2 пин, много других свободных
по чужой схеме собирал,
я еще чайник в этих делах
так поменяй пины, 5 и 9 строка. провода перекинуть не забудь
поменял in1 = 10;in4 = 6
и ничего не изменилось? давай больше информации, или сам разбирайся если думаешь что я экстрасенс
нечего не изменилось, совсем.
видео тогда сними и сюда ссылку. чтобы было видно джойстик и машинку как ты управляешь
ок
https://drive.google.com/file/d/0B52A_iXVI0iTSk5FWFJROGtoR1E/view?usp=sh...
в конце же ездит взад вперед
#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); }если двумя то да, а хотелось бы по отдельности
джойстиками*
ты последний код пробовал?
да, все по прежнему
хз. по коду я не вижу проблемы. странно что не регулируется вперед назад, но регулируется если одновременно 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); }открой терминал и посмотри правильно ли все цифры идут
библиотека да 1,8. да все так идет, этот код тоже попробовал все так же.
а если попробовать чтоб кнопками управлять? вверх-вниз\левый, треугольник-крест\правый?
наркоман штоле?))))
ну хз почему
не я так ради прикола поставил)))))
получиться кнопками?
да почему нет. у меня например в первом танке крестиком управлял. он у меня тоже аналоговый был, зависело от силы нажатия
прикольно, тоже на PS2?
http://arduino.ru/forum/proekty/tank-upravlyaemyi-dzhoistikom-ps-2
ну ну, видел)) ништяк)) чето методом тыка не получается кнопки воткнуть на управление.
экспериментируй, а если не хватает знаний научись упаврлять мотором без джойстика, чтобы понятно было что нужно подавать на драйвер, затем посмотри какие данные дает пульт. и придумай как их преобразовать чтобы управлять драйвером. двигайся постепенно короче