Мужики, выручайте! Имеется моторшилд на 4 двигателя на L293D. Есть скетч для управления всем этим делом, но с ним что-то не так. При заливке скетча работает корректно только одна кнопка, остальные только выводятся в монитор порта. Если вместо операторов else вставляю delay, то все работает. Помогите, пожалуйста, разобраться. (требуется, чтобы при нажатии кнопки двигатель крутился, при повторном нажатии останавливался). #include <AFMotor.h> #include <IRremote.h> int RECV_PIN = 14; AF_DCMotor motor_a(1, MOTOR12_64KHZ); AF_DCMotor motor_b(2, MOTOR12_64KHZ); AF_DCMotor motor_c(3, MOTOR12_64KHZ); AF_DCMotor motor_d(4, MOTOR12_64KHZ); IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); motor_a.setSpeed(255); motor_b.setSpeed(255); motor_c.setSpeed(255); motor_d.setSpeed(255); // motor_a.run(RELEASE); // motor_b.run(RELEASE); // motor_c.run(RELEASE); // motor_d.run(RELEASE); } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value); Serial.println(results.value,HEX); Serial.println("===="); if (results.value == 16771605) //мотор(а) вперед { Serial.println("vverhlev"); motor_a.run(FORWARD); } else { motor_a.run(RELEASE); } if (results.value == 16755285) //мотор(б) вперед { Serial.println("sgiblev"); motor_b.run(FORWARD); } else { motor_b.run(RELEASE); } if (results.value == 16767525)//мотор(с) вперед { Serial.println("vverhprav"); motor_c.run(FORWARD); } else { motor_c.run(RELEASE); } if (results.value == 16751205)//мотор(д) вперед { Serial.println("sgibprav"); motor_d.run(FORWARD); } else { motor_d.run(RELEASE); } if (results.value == 16738965) //мотор(а) назад { Serial.println("vnizlev"); motor_a.run(BACKWARD); } else { motor_a.run(RELEASE); } if (results.value == 16722645) //мотор(б) назад { Serial.println("razgiblev"); motor_b.run(BACKWARD); } else { motor_b.run(RELEASE); } if (results.value == 16734885) //мотор(с) назад { Serial.println("vnizprav"); motor_c.run(BACKWARD); } else { motor_c.run(RELEASE); } if (results.value == 16718565) { Serial.println("razgibprav");//мотор(д) назад motor_d.run(BACKWARD); } else { motor_d.run(RELEASE); } irrecv.resume(); } }
Вместо if пользуйтесь case Код (Text): if (irrecv.decode(&results)) { switch (results.value) { case 16771605: { //мотор(а) вперед Serial.println("vverhlev"); motor_a.run(FORWARD); break; } case code IR ???: { // вместо else motor_a.run(RELEASE); break; } case 16755285: { //мотор(б) вперед Serial.println("sgiblev"); motor_b.run(FORWARD); break; } case code IR ???: { // вместо else motor_b.run(RELEASE); } }
Переписал код, но компилятор начал ругаться. Подскажите, пожалуйста, что не так? #include <AFMotor.h> #include <IRremote.h> int RECV_PIN = 14; AF_DCMotor motor_a(1, MOTOR12_64KHZ); AF_DCMotor motor_b(2, MOTOR12_64KHZ); AF_DCMotor motor_c(3, MOTOR12_64KHZ); AF_DCMotor motor_d(4, MOTOR12_64KHZ); IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); motor_a.setSpeed(255); motor_b.setSpeed(255); motor_c.setSpeed(255); motor_d.setSpeed(255); motor_a.run(RELEASE); motor_b.run(RELEASE); motor_c.run(RELEASE); motor_d.run(RELEASE); } void loop() { if (irrecv.decode(&results)) { switch (results.value) Serial.println(results.value); Serial.println(results.value,HEX); Serial.println("===="); { case 0x20DF8877: { Serial.println("vverhlev"); motor_a.run(FORWARD); break; } case 20DF8877: { motor_a.run(RELEASE); break; } case 20DF48B7: //мотор(б) вперед { Serial.println("sgiblev"); motor_b.run(FORWARD); break; } case 20DF48B7: { motor_b.run(RELEASE); break; } case 20DFC837: //мотор(с) вперед { Serial.println("vverhprav"); motor_c.run(FORWARD); break; } case 20DFC837: { motor_c.run(RELEASE); break; } case 20DF28D7: //мотор(д) вперед { Serial.println("sgibprav"); motor_d.run(FORWARD); break; } case 20DF28D7: { motor_d.run(RELEASE); break; } case 20DFA857: //мотор(а) назад { Serial.println("vnizlev"); motor_a.run(BACKWARD); break; } case 20DFA857: { motor_a.run(RELEASE); break; } case 20DF6897: //мотор(б) назад { Serial.println("razgiblev"); motor_b.run(BACKWARD); break; } case 20DF6897; { motor_b.run(RELEASE); break; } case 20DFE817: //мотор(с) назад { Serial.println("vnizprav"); motor_c.run(BACKWARD); break; } case 20DFE817: { motor_c.run(RELEASE); break; } case 20DF18E7: { Serial.println("razgibprav");//мотор(д) назад motor_d.run(BACKWARD); break; } case 20DF18E7: { motor_d.run(RELEASE); break; } irrecv.resume(); } }