Всем привет! И всех с Новым годом. Подскажите пожалуйста: Я сделал чтобы при нажатии на кнопку включался светодиод, при повторном нажатии, выключался. Все работает но есть вопрос на который я не смог найти ответ. Код (C++): int but = 12; int led = 11; int curr_but = LOW; int prev_but = LOW; int st_led = LOW; void setup() { pinMode(but, INPUT); pinMode(led, OUTPUT); } void loop() { curr_but = digitalRead(but); delay(10); if (curr_but == HIGH && prev_but == LOW) { st_led = !st_led; } prev_but = curr_but; digitalWrite(led,st_led); } При первом нажатие: Текущее состояние - HIGH, предыдущее - LOW = условие верное, значит меняем состояние диода, и в переменную прошлого состояния записываем текущее. При втором нажатии: Текущее состояние - HIGH, предыдущее HIGH (мы его изменили в первом нажатие), почему тогда светодиод выключается? ведь условие st_led = !st_led; не должно срабатывать. Вот не могу понять как это работает. Объясните пожалуйста.
Обычная защита от дребезга. prev_but переопределяется при каждой итерации цикла. Нажали на кнопку - оно равно HIGH, отпустили - LOW.
Я думаю дело в дребезге. Программа отслеживает нажатие, флаг тут не нужен (вернее, он уже есть), но иногда за одно нажатие фактически их несколько. Сделайте задержку и будет вам счастье.