Определение того, была ли нажата и отпущена кнопка
Я хочу определить, была ли нажата и отпущена кнопка. Поэтому я подумал, что правильным подходом будет сначала подождать, пока пин не выдаст LOW
, а затем подождать, пока пин не выдаст HIGH
:
void push(int pin) {
// ждем, пока кнопка не будет нажата...
while (digitalRead(pin) == LOW);
// ... и снова отпущен
while (digitalRead(pin) == HIGH);
}
Эту функцию можно легко использовать повторно. Код работает отлично, но мне просто интересно, считается ли это решение чистым и хорошей практикой.
@Patrick Bucher, 👍4
1 ответ
«Я обычно ставлю конденсатор рядом с кнопкой»
Конденсатор емкостью 1 мкФ на кнопке — это просто, дешево и не нужно возиться с кодами устранения дребезга. См. отличное руководство по переключателям Ника Гэммона, которое охватывает практически любую мыслимую ситуацию при использовании переключателей с Arduino и клонами (высокий или низкий уровень, GND или +5 В, внутренняя подтяжка вверх или вниз, устранение дребезга конденсатора или программное устранение дребезга и т. д.). В любом случае, у Ника Гэммона есть много замечательных пояснительных примеров на его сайте и в других местах, где он комментирует в сети.
- Хорошая кнопка debouncing/Библиотека StateChange
- Остановить мигание светодиодов
- Интеграция 2 кнопок для включения и выключения светодиода.
- Код Arduino для управления 4 светодиодами с 4 кнопок
- Нужен ли подтягивающий/понижающий резистор для цепи светодиода кнопки?
- Как прервать функцию цикла и перезапустить ее?
- Как перезапустить счетчик в программе с помощью кнопки в настройке LDR Tripwire
- Кнопочная матрица / схемы подключения