Повторное включение - два раза нажать надо.
Та фигня, за счёт дребезга проскочит
1 лайк
Раз уж на то пошло и, ТС- у везёт сегодня -
вот и мой вариант, и простейший антидребезг))
Лучше сделать тоже неблокирующий, но сейчас уже нет времени.
delay() в цикле for спокойно до 100мс, а то и больше.
Спойлер
#include "Adafruit_NeoPixel.h"
#define LED_COUNT 9
#define LED_PIN 6
#define BTN_PIN 3
uint8_t btnStat = 0;
bool BTN = false;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN,
NEO_GRB + NEO_KHZ800);
void setup()
{
pinMode(BTN_PIN, INPUT_PULLUP);
strip.begin(); //Инициализируем ленту.
Serial.begin(9600);
}
bool btnCheck()
{
if (!digitalRead(BTN_PIN))
{
delay(2);//простейший антидребегз
if (!digitalRead(BTN_PIN) && btnStat == 0)
{
btnStat = 1;
BTN = true;
}
if (!digitalRead(BTN_PIN) && btnStat == 2)
{
btnStat = 3;
BTN = false;
}
}
else
{
delay(2);
if (digitalRead(BTN_PIN) && btnStat == 1)
{
btnStat = 2;
BTN = true;
}
if (digitalRead(BTN_PIN) && btnStat == 3)
{
btnStat = 0;
BTN = false;
}
}
return BTN;
}
void loop() {
for (int i = 0; i < LED_COUNT; i++)
{
if(btnCheck())
strip.setPixelColor(i, strip.Color(100, 170, 100)); //
else
strip.setPixelColor(i, strip.Color(0, 0, 0)); //
strip.show();
Serial.println(BTN);
delay(100);
}
}
if (btn_flag > 2) {
btn_flag = 1;
}