Дребезг кнопки. Урок 2.3. Ардуино

Содержание

Подавление дребезга кнопки

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

В прошлый раз мы уже попробовали подключить кнопку к ардуино, настроить пины ардуино на чтение информации и управлять светодиодом с помощью этой кнопки. Если вы уже забыли или пропустили эту статью, пожалуйста, посмотрите её.

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

Так что, сегодня рассмотрим проблему дребезга кнопки и программных способах её решения.

Чтобы выполнить этот урок нам понадобятся.

  • Ардуино UNO
  • Макетная плата
  • Перемычки
  • Резистор номиналом 10 кОм
  • Кнопка
  • Кабель USB

Дребезг кнопки

Обычно кнопка представляет собой механическое устройство с пружиной. При нажатии на кнопку контакт срабатывает не сразу, а на протяжении нескольких миллисекунд меняется от 0 к 1 несколько раз. Соответственно, нельзя просто прочитать значение на контакте ардуино, необходимо избавиться от этого дребезга.

Дребезг кнопки

Устранить этот эффект можно как аппаратным путем, так и программным. Но поскольку мы имеем в своем распоряжении ардуино, рассмотрим программу, которая решает эту проблему. Тем более, что такая программа уже есть в стандартной библиотеке ардуино ide.

Debounce.ino

Откроем программу из меню File — Examples — Digital — Debounce

Программа уже имеет исчерпывающий комментарий прямо в тексте, но рассмотрим как все работает.

Алгоритм довольно простой. Нам нужно сравнить состояние кнопки несколько раз через небольшой промежуток времени. Чтобы это сделать, необходимо использовать несколько переменных. Инициируем их в области объявления переменных.

Здесь мы ввели переменные buttonState и lastButtonState для проверки и сравнения состояния кнопки. Когда кнопка будет нажата, мы сравним ее состояние с переменной lastButtonState. И если состояние будет отличаться от ранее сохраненного, счетчик lastDebounceTime будет сброшен.

Переменные lastDebounceTime и debounceDelay используют тип unsigned long потому, что время исчисляется в миллисекундах и простого int будет недостаточно.

В функции setup() настроим состояние пинов и светодиода. Пин кнопки на чтение, пин светодиода на вывод, напряжение на пин светодиода = HIGH

Далее в цикле loop() будем постоянно проверять состояние кнопки. И если состояние в момент проверки будет отличаться от предыдущего, запустим процесс повторной проверки.

Здесь мы видим новую функцию millis(). Она возвращает количество миллисекунд с момента начала работы программы на плате Arduino. Это количество сбрасывается в 0, из-за переполнения значения, примерно через 50 дней непрерывной работы.

Принципиальная схема подключения кнопки

Итак, в цикле loop() мы постоянно считываем напряжение на пине 2 и записываем его в переменную reading.

Если reading не равно предыдущему состоянию кнопки, то счетчику lastDebounceTime присваивается значение функции millis().

Через 50 миллисекунд значение переменной reading сравнивается с текущим состоянием кнопки и, если они не равны, то текущее состояние кнопки приравнивается к reading.

И, наконец, если кнопка нажата, то состояние светодиода меняется на противоположное.

После этого на пин светодиода посылаем состояние, которое мы определили, а предыдущее состояние кнопки сохраняем для проверки в следующем витке цикла.

В результате мы получим возможность включать светодиод нажатием кнопки, но не держать кнопку нажатой постоянно. А только менять состояние светодиода нажатием.

Полный текст программы

Заключение

В этот раз мы рассмотрели программу Debounce из стандартной библиотеки программ ардуино ide. Она позволяет избавиться от дребезга кнопки используя программу ардуино. В следующий раз мы оформим эту программу в отдельную функцию и будем использовать ее для управления группы светодиодов.


Источник: arcadepub.ru