Задача простая: Arduina, 2 светодиода и IRDA. При нажатии на кнопку "1" на пульте ДУ - мигает один светодиод, при нажатии на кнопку "2" - мигает второй. Код вот такой: Код (C++): #include <IRremote.h> #define LED_PIN 13 // номер выхода,подключенного к светодиоду #define LED_PIN3 10 #define INTERVAL 100UL // интервал между включение/выключением светодиода unsigned long _ABVAR_1_IR = 0UL ; //libraries at http://duinoedu.com/dl/lib/grove/EDU_IRremote_GroveDupont/ IRrecv monRecepteur_pin4(4); void setup() { pinMode(LED_PIN, OUTPUT); pinMode(LED_PIN3, OUTPUT); monRecepteur_pin4.enableIRIn(); } void loop() { _ABVAR_1_IR = monRecepteur_pin4.lireCodeIr() ; if (( ( _ABVAR_1_IR ) == ( 16736925UL ) )) { static unsigned long previousMillis = 0; if(millis() - previousMillis > INTERVAL) { previousMillis = millis(); digitalWrite(LED_PIN,!digitalRead(LED_PIN)); } } if (( ( _ABVAR_1_IR ) == ( 16753245UL ) )) { static unsigned long previousMillis = 0; if(millis() - previousMillis > INTERVAL) { previousMillis = millis(); digitalWrite(LED_PIN3,!digitalRead(LED_PIN3)); } } } На кнопки реагирует, но не так, как хотелось бы, т.е. первый раз нажимаем - включается, второй раз нажимаем - выключается, мигать светодиод не хочет. Хотя в коде ниже мигает без проблем. В чем ошибка? Код (C++): #define LED_PIN 13 // номер выхода,подключенного к светодиоду #define INTERVAL 1000UL // интервал между включение/выключением светодиода (1 секунда) void setup() { // задаем режим выхода для порта, подключенного к светодиоду pinMode(LED_PIN, OUTPUT); } void loop() { // здесь будет код, который будет работать постоянно // и который не должен останавливаться на время между переключениями свето static unsigned long previousMillis = 0; // храним время последнего переключения светодиода //проверяем не прошел ли нужный интервал, если прошел то if(millis() - previousMillis > INTERVAL) { // сохраняем время последнего переключения previousMillis = millis(); // меняем состояние выхода светодиода на противоположное текущему. // если горит - тушим, не горит - зажигаем. digitalWrite(LED_PIN,!digitalRead(LED_PIN)); } }
Может у пульта повтор кнопки идет с другим кодом. Добавте вывод в сериал порт значения _ABVAR_1_IR сразу после Код (Text): _ABVAR_1_IR = monRecepteur_pin4.lireCodeIr();
У вас двойное определение переменной. Мигать светодиоды будут не так, как вы задумали. Что делает функция lireCodeIr()?