Написал такой скетч Код (Text): #include <Servo.h> #include <IRremote.h> int RECEIVE_PIN = 11; IRrecv irrecv(RECEIVE_PIN); decode_results results; Servo myservo; Servo myservo2; int led_pin = 12; int on_off = 1; void setup() { irrecv.enableIRIn(); myservo.attach(4); myservo2.attach(9); myservo.write(178); myservo2.write(2); pinMode(led_pin, OUTPUT); digitalWrite(led_pin, HIGH); } void loop() { if(irrecv.decode(&results)) { if(results.value == 0xFF30CF) { if(on_off == 1) { digitalWrite(led_pin, LOW); on_off = 0; } if(on_off == 0) { digitalWrite(led_pin, HIGH); on_off = 1; } } if(results.value == 0xFF48B7) { myservo.write(178); myservo2.write(2); if(on_off == 1) { delay(1000); digitalWrite(led_pin, HIGH); } } if(results.value == 0xFF6897) { if(on_off == 1) { digitalWrite(led_pin, LOW); } myservo.write(2); myservo2.write(178); } irrecv.resume(); } } Суть такова: нажал на одну кнопку - диод потух, сервы повернулись, нажал на другую - диод загорается, сервы повернулись на другой угл. Это все прекрасно работает. Но у меня есть еще одна команда: Код (Text): if(results.value == 0xFF30CF) { if(on_off == 1) { digitalWrite(led_pin, LOW); on_off = 0; } if(on_off == 0) { digitalWrite(led_pin, HIGH); on_off = 1; } } Суть ее такова: нажал на кнопку, проверяет значение переменной, если 1, то выключаем диод, если 0, то включаем. И от этой команды зависят другие(повороты серво и вкл/выкл диода). То есть есди значение переменной on_off = 1, то вкл/выкл диода перед поворотом серв так сказать разрешен, если on_off = 0, то, при выполнении последующих команд, сервы поворачиваются, а диод ни включается, ни выключается(он всегда выключен). Но почему то эта команда у меня не работает: нажимаю на кнопку, но значение переменной не меняется(диод не выключается). В чем проблема, ведь реализация легкая, вроде?
Потому, что вы тут же передергиваете состояние обратно: второй if {} возвращает все на место после первого. Да и вообще лишней писанины много... Лучше так: Код (Text): if(results.value == 0xFF30CF) { on_off = !on_off; digitalWrite(led_pin, on_off); }