Официальный сайт компании Arduino по адресу arduino.cc
Сервоприводы и джойстик PS/2
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Пнд, 12/09/2016 - 10:22
Добрый день всем ! Делаю танк Карл Герат из бумаги с упрвлением ардуино через джойстик PS/2. Нужна Ваша помощь в скетче - не могу прописать код , чтобы серва двигалась плавно от нажатия кнопок в разных направлениях, например , от нажатия L1-вниз и L2 -вверх. От стикера(джойстика) все получается, но надо от кнопок .
// движение гусеницами через драйвер L298N(сделано). // опускание и поднимание корпуса танка двумя сервоприводами // опускание и поднимание пушки сервоприводом // заталкивание снаряда в дуло сервоприводом // открывание затвора сервоприводом // движение дула сервоприводом // выстрел через реле #define pin1 A0 // из -за недостатка пинов #define pin2 A1 // назначаю #define pin3 A2 // эти выводы #define pin4 A3 // для драйвера L298N #include <Servo.h> #include <PS2X_lib.h> //for v1.6 PS2X ps2x; int PS2 = 0; Servo servo_1; Servo servo_2; const int ena = 3; // PWM pin to change speed левая гусеница Джойстик const int enb = 5; // PWM pin to change speed правая гусеница Джойстик int fspeed; // forward speed int pos_1 = 90; int pos_2 = 50; void setup() { servo_1.attach(6); servo_2.attach(8); PS2 = ps2x.config_gamepad(13, 11, 10, 12, true, true); //Настройка выводов: (clock, command, attention, data, true, true) pinMode(ena, OUTPUT); // connection to L298n Джойстик pinMode(enb, OUTPUT); // connection to L298n Джойстик pinMode(pin1, OUTPUT); // вывод для L298N pinMode(pin2, OUTPUT); // вывод для L298N pinMode(pin3, OUTPUT); // вывод для L298N pinMode(pin4, OUTPUT); // вывод для L298N } void loop() { ps2x.read_gamepad(); // Движение гусеницами if (ps2x.Analog(PSS_RY) == 128) analogWrite(ena, 0); if (ps2x.Analog(PSS_LY) == 128) analogWrite(enb, 0); if (ps2x.Analog(PSS_RY) > 128) { fspeed = map(ps2x.Analog(PSS_RY), 129, 255, 0, 255); digitalWrite(pin1, LOW); digitalWrite(pin2, HIGH); analogWrite(ena, fspeed); } if (ps2x.Analog(PSS_RY) < 128) { fspeed = map(ps2x.Analog(PSS_RY), 0, 127, 255, 0); digitalWrite(pin1, HIGH); digitalWrite(pin2, LOW); analogWrite(ena, fspeed); } if (ps2x.Analog(PSS_LY) > 128) { fspeed = map(ps2x.Analog(PSS_LY), 129, 255, 0, 255); digitalWrite(pin3, LOW); digitalWrite(pin4, HIGH); analogWrite(enb, fspeed); } if (ps2x.Analog(PSS_LY) < 128) { fspeed = map(ps2x.Analog(PSS_LY), 0, 127, 255, 0); digitalWrite(pin3, HIGH); digitalWrite(pin4, LOW); analogWrite(enb, fspeed); } // Принудительное опускание корпуса танка (два серво запарарелить) if(ps2x.ButtonPressed(PSB_R1)) { servo_1.attach (6); servo_1.write (30); } if(ps2x.ButtonPressed(PSB_R2)) { servo_1.write (150); delay(200); servo_1.detach (); } // Опускание и подъем пушки if(ps2x.ButtonPressed(PSB_L1)) { servo_2.attach (8); servo_2.write (30); } if(ps2x.ButtonPressed(PSB_L2)) { servo_2.write (150); delay(200); servo_2.detach (); } delay(10); }