написал один скетч с функцией flag - работает хорошо - только от кнопки дребезг
переписал с библиотеками irremote и bounce. работает отлично, только:
1. при нажатии кнопки переключается отлично
2. при нажатии пульта переключается отлично
3. если нажал кнопку - на пульт приходиться дважды нажимать чтоб сработало устройство и наоборот. еще при этом начинает гореть светодиод tx, а спустя секунд 30 гаснет
подскажите,плз, что исправить в коде для сработки от однократного нажатия в любом случае. с flag все так и было, но дребезг...
Код: Выделить всё
//управление нагрузками (светом) при помощи ик пульта и тактовой кнопки. команды ик пульта прописывать отдельно
#include <IRremote.h>
#include <Bounce.h>
//дефайним значения пинов с кнопкой и со светодиодом
#define BUTTON 2
#define led 13
//создаем объект класса Bounce. Указываем пин, к которому подключена кнопка, и время дребезга в мс.
Bounce bouncer = Bounce(BUTTON,5);
//задаем начальное состояние светодиода "выключен"
int ledValue = LOW;
// переменные
int RECV_PIN = 11;
int ledStat = 0;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
//определяем режимы работы пинов
pinMode(BUTTON,INPUT);
pinMode(led,OUTPUT);
Serial.begin(9600);
irrecv.enableIRIn(); // Запуск приемника
pinMode(led, OUTPUT);
}
void loop() {
//если сменилось состояние кнопки
if ( bouncer.update() ) {
//если считано значение 1
if ( bouncer.read() == HIGH) {
//если свет был выключен, будем его включать
if ( ledValue == LOW ) {
ledValue = HIGH;
//если свет был включен, будем выключать
} else {
ledValue = LOW;
}
//записываем значение вкл/выкл на пин со светодиодом
digitalWrite(led,ledValue);
}
}
if (irrecv.decode(&results))
{
Serial.println(results.value);
//красный
if (results.value == 0xFF48B7 && ledStat == 0)
{
digitalWrite(led, HIGH);
ledStat = 1;
}
else
if (results.value == 0xFF48B7
&& ledStat == 1)
{
digitalWrite(led, LOW);
ledStat = 0;
}
irrecv.resume(); // Получить слудующее значение
}
}

