Собрал машинку на радиоуправлении от пульта ps2. Все работает, но я хочу чтобы скорость была на 50% меньше. Что где исправить? Подскажите. #include <PS2X_lib.h> //for v1.6 #include <Servo.h> PS2X ps2x; int PS2 = 0; Servo VVservo; 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); Shoot.attach(6); 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_RY) == 128) analogWrite(enb, 0); if (ps2x.Analog(PSS_LY) == 128) digitalWrite(in1, LOW); if (ps2x.Analog(PSS_LY) == 128) digitalWrite(in2, LOW); if (ps2x.Analog(PSS_RY) == 128) digitalWrite(in3, LOW); if (ps2x.Analog(PSS_RY) == 128) digitalWrite(in4, LOW); 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); } 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); } if (ps2x.Analog(PSS_RY) > 128){ fspeed = map(ps2x.Analog(PSS_RY), 129, 255, 0, 255); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); analogWrite(enb, fspeed); } if (ps2x.Analog(PSS_RY) < 128){ fspeed = map(ps2x.Analog(PSS_RY), 0, 127, 255, 0); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); analogWrite(enb, fspeed); } VVservo.write(map(ps2x.Analog(PSS_RX), 0, 255, 170, 10)); if(ps2x.ButtonPressed(PSB_R1)) { Shoot.write(30); } if(ps2x.ButtonPressed(PSB_R2)) { Shoot.write(180); } if(ps2x.ButtonPressed(PSB_L1)) digitalWrite(0, HIGH); if(ps2x.ButtonPressed(PSB_L2)) digitalWrite(0, LOW); delay(50); }
Код (C++): #include <PS2X_lib.h> //for v1.6 #include <Servo.h> PS2X ps2x; int PS2 = 0; Servo VVservo; 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); Shoot.attach(6); 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_RY) == 128) analogWrite(enb, 0); if (ps2x.Analog(PSS_LY) == 128) digitalWrite(in1, LOW); if (ps2x.Analog(PSS_LY) == 128) digitalWrite(in2, LOW); if (ps2x.Analog(PSS_RY) == 128) digitalWrite(in3, LOW); if (ps2x.Analog(PSS_RY) == 128) digitalWrite(in4, LOW); 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); } 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); } if (ps2x.Analog(PSS_RY) > 128){ fspeed = map(ps2x.Analog(PSS_RY), 129, 255, 0, 255); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); analogWrite(enb, fspeed); } if (ps2x.Analog(PSS_RY) < 128){ fspeed = map(ps2x.Analog(PSS_RY), 0, 127, 255, 0); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); analogWrite(enb, fspeed); } VVservo.write(map(ps2x.Analog(PSS_RX), 0, 255, 170, 10)); if(ps2x.ButtonPressed(PSB_R1)) { Shoot.write(30); } if(ps2x.ButtonPressed(PSB_R2)) { Shoot.write(180); } if(ps2x.ButtonPressed(PSB_L1)) digitalWrite(0, HIGH); if(ps2x.ButtonPressed(PSB_L2)) digitalWrite(0, LOW); delay(50); } Как кто-то уже говорил вероятность ответа на не форматированный код очень мала)
А скорость чего?) Отклика, или в целом скорость с которой машинка едет? Можно просто переопределить переменную fspeed, т.е. рассчитать 50% и после передавать ее в методы analogWrite. Но это какой то жесткий костыль. Неплохо бы посмотреть саму библиотеку для этого джостика, может там какие процедурки есть для доп. настроек поведения.
Спасибо за ответ. Я хочу занизить скорость самой машинки с которой она едет. "Можно просто переопределить переменную fspeed, т.е. рассчитать 50% и после передавать ее в методы analogWrite." Можешь про это по подробнее. Я не новичок и не супер ардуинщик, золотой средничок)
Можно попробовать так. Код (C++): #include <PS2X_lib.h> //for v1.6 #include <Servo.h> PS2X ps2x; int PS2 = 0; Servo VVservo; 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); Shoot.attach(6); 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_RY) == 128) analogWrite(enb, 0); if (ps2x.Analog(PSS_LY) == 128) digitalWrite(in1, LOW); if (ps2x.Analog(PSS_LY) == 128) digitalWrite(in2, LOW); if (ps2x.Analog(PSS_RY) == 128) digitalWrite(in3, LOW); if (ps2x.Analog(PSS_RY) == 128) digitalWrite(in4, LOW); if (ps2x.Analog(PSS_LY) > 128){ fspeed = map(ps2x.Analog(PSS_LY), 129, 255, 0, 255); fspeed = fspeed*0.5; digitalWrite(in1, LOW); digitalWrite(in2, HIGH); analogWrite(ena, fspeed); } if (ps2x.Analog(PSS_LY) < 128){ fspeed = map(ps2x.Analog(PSS_LY), 0, 127, 255, 0); fspeed = fspeed*0.5; digitalWrite(in1, HIGH); digitalWrite(in2, LOW); analogWrite(ena, fspeed); } if (ps2x.Analog(PSS_RY) > 128){ fspeed = map(ps2x.Analog(PSS_RY), 129, 255, 0, 255); fspeed = fspeed*0.5; digitalWrite(in3, HIGH); digitalWrite(in4, LOW); analogWrite(enb, fspeed); } if (ps2x.Analog(PSS_RY) < 128){ fspeed = map(ps2x.Analog(PSS_RY), 0, 127, 255, 0); fspeed = fspeed*0.5; digitalWrite(in3, LOW); digitalWrite(in4, HIGH); analogWrite(enb, fspeed); } VVservo.write(map(ps2x.Analog(PSS_RX), 0, 255, 170, 10)); if(ps2x.ButtonPressed(PSB_R1)) { Shoot.write(30); } if(ps2x.ButtonPressed(PSB_R2)) { Shoot.write(180); } if(ps2x.ButtonPressed(PSB_L1)) digitalWrite(0, HIGH); if(ps2x.ButtonPressed(PSB_L2)) digitalWrite(0, LOW); delay(50); }