Привет! Описание проекта: двух колесная машинка под руководством Arduino UNO и драйвера L298N (mini) должна управляться с джойстика PS2 Проблема в том, что заливаю программу на Arduino UNO, но она не работает как нужно... Таких машинок пять, три работают, а две не хотят работать (скетч для всех один и тот же). Ардуинки китайские. Проверяю программу на оригинальных - не работают... Помогите решить проблему.. Код (C++): #include <PS2X_lib.h> //for v1.6 PS2X ps2x; int PS2 = 0; const int in1 = 5; // direction pin 1 const int in2 = 4; // direction pin 2 const int ena = 6; // PWM pin to change speed const int in3 = 3; // direction pin 1 const int in4 = 2; // direction pin 2 const int enb = 1; // 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_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(in1, HIGH); digitalWrite(in2, LOW); analogWrite(enb, fspeed); } if (ps2x.Analog(PSS_LX) < 128){ fspeed = map(ps2x.Analog(PSS_LX), 0, 127, 255, 0); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); analogWrite(ena, fspeed); } delay(50); }
Код (C++): digitalWrite(1, LOW); Действительно "1" или должно быть "in1"? Код (C++): if (ps2x.Analog(PSS_LY) == 128) analogWrite(ena, 0); if (ps2x.Analog(PSS_LY) == 128) analogWrite(enb, 0); Зачем две проверки, составной оператор не катит? Код (C++): PS2 = ps2x.config_gamepad(13,11,8,12, true, true); Переменная "PS2" зачем? Нигде дальше она не используется.
так не бывает. Если программа и правда одна и та же (вы ее не правили "совсем чуть-чуть" для каждой машинки - например номера пинов?). Так вот, если код программы во всех машинках АБСОЛЮТНО ОДИНАКОВЫЙ, то и работать она будет ОДИНАКОВО. Ищите проблемы в железе, проверяйте все подключения. Небось где-то одели провод не на тот контакт или что-то подобное
если МК не отрабатывает программу - МК в помойку. Но я более чем уверен, что программа работает именно так, как написана.
Да. А если программа отрабатывает как написана, но не так, как думает программист - программиста в помойку.