Устранение дребезга контактов, вкл. выкл. светодиода кнопкой.
- Войдите на сайт для отправки комментариев
Ср, 04/03/2020 - 22:28
Приветствую! Изучаю ардуино по урокам ютуба (https://www.youtube.com/watch?v=yvdV5dNzRHQ&t=282s).
Делая проект (см.тему), убрал часть кода, а именно: delay(5) и все равно все работает.
Исходный код:
const int led = 9; const int button=2; boolean lastButton = false; boolean currentButton = false; boolean ledOn = false; void setup(){ pinMode(led,OUTPUT); pinMode(button,INPUT); } boolean debounce (boolean last) { boolean current = digitalRead(button); if (last != current) { delay(5); return current; } } void loop() { currentButton = debounce(lastButton); if (lastButton == LOW && currentButton == HIGH) ledOn = !ledOn; lastButton = currentButton; digitalWrite(led, ledOn); }
Правленый код:
const int led = 9;
const int button=2;
boolean lastButton = false;
boolean currentButton = false;
boolean ledOn = false;
void setup(){
pinMode(led,OUTPUT);
pinMode(button,INPUT);
}
boolean debounce (boolean last)
{
boolean current = digitalRead(button);
return current;
}
void loop()
{
currentButton = debounce(lastButton);
if (lastButton == LOW && currentButton == HIGH)
ledOn = !ledOn;
lastButton = currentButton;
digitalWrite(led, ledOn);
}
Прошу пояснить зачем delay(5)? Парень с ютуба перемудрил?
Во-первых, Вы можете и всю функцию debounce убрать, а в скетче написать сurrentButton = digitalRead(button); оно тоже будет работать. Если кнопка хорошая, то можно и не заметить этот самый дребезг, который автор ролика пытается устранить.
А во-вторых, его функция написана с ошибкой. В случае last = current возвращаемое функцией значение неопределено. Так что хорошего она всё равно ничего не делает.
Если интересует подавление дребезга, то в стандартной поставке arduino ide есть пример Debounce. Смотрите его.
Мне заказчик буквально вчера пишет типа, что бы устранить дребезг контактов кнопки, сделайте задержку в 1 сек. после нажатия.) Это в ТЗ!
А что такого? Может он никуда не торопится или задержка должна быть неблокирующей.
Нет, абсолютно ничего такого. Это я как один из вариантов подавления дребезга. Бюджетненький.)
Мне заказчик буквально вчера пишет типа, что бы устранить дребезг контактов кнопки, сделайте задержку в 1 сек. после нажатия.) Это в ТЗ!
Та не, это понятно. Уже всё принято.) Просто заказчик сам программировал 35 лет тому назад.)))
Мне заказчик буквально вчера пишет типа, что бы устранить дребезг контактов кнопки, сделайте задержку в 1 сек. после нажатия.) Это в ТЗ!
на Прибалтику работаете??? )))
Заменят разбитый экран на чугунный. Нашел проблему тоже.
на Прибалтику работаете??? )))
Эстонию в смысле?) Та без разницы, главное строго по ТЗ.)