m13-02 практика 12 мин

Проект 2: кнопка, счётчик, антидребезг

Второй проект — кнопка и счётчик. Он учит читать вход, бороться с дребезгом и хранить состояние.

Схема: кнопка между пином и землёй, подтяжка внутри (INPUT_PULLUP). Нажал — 0, отпустил — 1. Светодиод и резистор — как в первом проекте.

Код по шагам:

  1. Читать пин, хранить предыдущее состояние.
  2. Если состояние изменилось с 1 на 0 и прошло больше 20 мс — это нажатие.
  3. Увеличить счётчик, вывести в Serial.
  4. Отдельно — состояние для отпускания (иначе одно нажатие посчитается много раз).

Типичные ошибки:

— Нет антидребезга: счётчик прыгает на 3–5 за нажатие.
— Сравнение с HIGH вместо LOW (забыли, что подтяжка инвертирует).
— Обработка внутри прерывания с delay.
— Счётчик на int, который переполняется и уходит в минус — не критично, но полезно знать.

Что дальше: кнопка, которая переключает режимы (короткое нажатие / длинное), двойной клик, меню на экране.

Проверка: нажми 10 раз и убедись, что счётчик увеличился ровно на 10. Если больше — дребезг не побеждён.

Зачем

Кнопка — первый настоящий ввод, и она показывает, почему «железо» требует антидребезга, а не просто чтения пина.

Сделай сейчас

Собери счётчик нажатий. Сначала без антидребезга — посчитай, насколько врёт. Потом добавь задержку 20 мс и проверь снова.

Проверь себя

Почему при подтяжке к питанию нажатие даёт 0, а не 1?

Кнопка соединяет пин с землёй. Пока не нажата — резистор держит единицу. Нажали — пин прижат к нулю, и ток идёт через резистор в землю.

Пройти тест 5 заданий
0 из 102 · 0%
Источники
  1. Wikipedia: Switch debouncer
    антидребезг
  2. ESP-IDF: GPIO и прерывания
    чтение кнопки