Всем привет. Пишу скетч. При нажатии на кнопку должны начать мигать светодиоды, а как кнопка отжата переставать. Подскажите как остановить работу функции кнопкой. Код (C++): #include <Bounce2.h> Bounce bouncer = Bounce(); #define LED_PIN12 12 #define LED_PIN13 13 #define LOW_INTERVAL 350 #define HIGH_INTERVAL 70 void setup() { pinMode(2, INPUT); digitalWrite(2 ,HIGH); pinMode(LED_PIN12 , OUTPUT); pinMode(LED_PIN13, OUTPUT); bouncer .attach(2); bouncer .interval(5); } void loop() { if (bouncer.update()) { if (bouncer.read()==0) { blinkLed(); } else ?????? } void blinkLed(){ static unsigned long period= LOW_INTERVAL; static unsigned long prevMillis=0; if( (millis()-prevMillis)>=period){ prevMillis=millis(); digitalWrite(LED_PIN12,!digitalRead(LED_PIN12)); digitalWrite(LED_PIN13,!digitalRead(LED_PIN13)); period=(period==LOW_INTERVAL)?HIGH_INTERVAL: LOW_INTERVAL; LOW_INTERVAL/HIGH_INTERVAL } }
Установить флаг, если он поднят мигать, не поднят - не мигать. В качестве флага можно использовать сам опрос кнопки, но это не совсем верно. Лучше опрашивать ее с антидребезгом (раз в 50 мс, например) и выставлять флаг по результату.
Так, что то я запутался. Здесь у меня указан в качестве флага опрос кнопки как я понял, и я же поставил дребезг. Или я что то неправильно сделал? Прочитал про флаг состояния, дак меня не это интересует, а интересует как остановить функцию blinkLed();, когда кнопка будет отжата. Вот я нажал кнопку пин 2, запускается blinkLed(); отжимаю, и blinkLed(); должна остановиться (светодиоды погаснуть).
Как оно вообще компилируется у вас? И не используйте библиотеки для каждого чиха. Сделайте антидребезг руками, сможете понять как он работает и в каком месте происходит.
Компилируется нормально, как дребезг работает я понимаю. Чет не пойму, кнопка почему то вообще не работает. Светодиоды то мигают то просто горят, независимо от кнопки, какая то лажа. Даже убрав дребезг.