Определение того, была ли нажата и отпущена кнопка

Я хочу определить, была ли нажата и отпущена кнопка. Поэтому я подумал, что правильным подходом будет сначала подождать, пока пин не выдаст LOW, а затем подождать, пока пин не выдаст HIGH:

void push(int pin) {
  // ждем, пока кнопка не будет нажата...
  while (digitalRead(pin) == LOW);
  // ... и снова отпущен
  while (digitalRead(pin) == HIGH);
}

Эту функцию можно легко использовать повторно. Код работает отлично, но мне просто интересно, считается ли это решение чистым и хорошей практикой.

, 👍4


1 ответ


4

«Я обычно ставлю конденсатор рядом с кнопкой»

Конденсатор емкостью 1 мкФ на кнопке — это просто, дешево и не нужно возиться с кодами устранения дребезга. См. отличное руководство по переключателям Ника Гэммона, которое охватывает практически любую мыслимую ситуацию при использовании переключателей с Arduino и клонами (высокий или низкий уровень, GND или +5 В, внутренняя подтяжка вверх или вниз, устранение дребезга конденсатора или программное устранение дребезга и т. д.). В любом случае, у Ника Гэммона есть много замечательных пояснительных примеров на его сайте и в других местах, где он комментирует в сети.

,