При работе с микроконтроллерами, такими как ESP32, и механическими кнопками часто возникает неприятный эффект, известный как "дребезг контактов". Он проявляется в виде множественных ложных срабатываний при одном нажатии на кнопку, что может привести к некорректной работе устройства. Эта новость, основанная на статье с сайта Arduino-tex, расскажет о причинах дребезга и эффективных методах его устранения в среде разработки Arduino IDE.
Дребезг – это кратковременное многократное замыкание и размыкание контактов кнопки при её нажатии или отпускании. Вместо мгновенного перехода из состояния LOW в HIGH (или наоборот), происходит серия быстрых "прыжков" сигнала. Это связано с физическими особенностями материалов и конструкции кнопок. В результате, ESP32 может интерпретировать одно нажатие как несколько, что приводит к ошибкам в работе программы.
Для работы с кнопкой используется простая схема: один контакт подключается к цифровому выводу ESP32 (например, GPIO21), а другой – к общему проводу (GND). Для надежной работы необходимо использовать подтягивающий резистор (pull-up), который может быть как внешним, так и внутренним (активируется программно).
В статье на Arduino-tex.ru подробно описаны несколько программных способов подавления дребезга:
DEBOUNCE_TIME
) состояние остается стабильным, считается, что дребезг закончился, и регистрируется новое состояние. Этот метод эффективно отфильтровывает ложные срабатывания.Примеры кода и пояснения:
В статье на Arduino-tex представлены подробные примеры кода на C/C++ для каждого из описанных методов. Каждый пример сопровождается комментариями, объясняющими назначение переменных и логику работы программы. Читатели могут скопировать код и протестировать его в своей среде Arduino IDE.
Пример с использованием библиотеки EZButton (для одной кнопки):
/* * ESP32 Arduino IDE. Подавление дребезга контактов кнопки. * https://arduino-tex.ru/news/204/esp32-podavlenie-drebezga-kontaktov-knopki.html */ #include <EZButton.h> // Подключение библиотеки EZButton для упрощения работы с кнопкой #define DEBOUNCE_TIME 50 // Время подавления дребезга в миллисекундах, увеличьте это время, если дребезг все еще присутствует #define BTN_1_PIN 21 //пину GPIO21 #define BTN_1 0 void ReadButtons(bool *states, int num) { //Read all button states however you want states[BTN_1] = !digitalRead(BTN_1_PIN); } //Считывайте состояния кнопок с помощью функции 'ReadButtons' //Порог удержания: 500 мс //Интервал удержания: 300 мс //Время ожидания: 50 мс DEBOUNCE_TIME EZButton _ezb(1, ReadButtons, 1000, 200, DEBOUNCE_TIME); void setup() { Serial.begin(115200); // Инициализация последовательного соединения на скорости 115200 бит/с pinMode(BTN_1_PIN, INPUT_PULLUP); //subscribe to needed events _ezb.Subscribe(BTN_1, Btn1Pressed, PRESSED); _ezb.Subscribe(BTN_1, Btn1Released, RELEASED); } void loop() { _ezb.Loop(); // Необходимо вызывать функцию loop() для обработки состояний кнопки } void Btn1Pressed() { // Проверка, была ли кнопка нажата (переход из отпущенного состояния в нажатое) Serial.println("Кнопка нажата"); // Вывод сообщения в последовательный порт } void Btn1Released() { // Проверка, была ли кнопка отпущена (переход из нажатого состояния в отпущенное) Serial.println("Кнопка отпущена"); // Вывод сообщения в последовательный порт }
(Полный код и примеры для нескольких кнопок доступны в оригинальной статье).
Дополнительные советы:
DEBOUNCE_TIME
может потребовать настройки в зависимости от типа используемой кнопки.Заключение:
Дребезг контактов – распространенная проблема, но ее можно эффективно решить с помощью программных методов. Статья на предоставляет подробное руководство по подавлению дребезга в среде Arduino IDE при работе с ESP32. Использование библиотеки EZButton делает этот процесс еще проще и удобнее.
Понравилась новость ESP32 и дребезг контактов: как победить в Arduino IDE? Не забудь поделиться с друзьями в соц. сетях.
А также подписаться на наш канал на YouTube, вступать в группу Вконтакте.
Понравилась статья? Поделитесь ею с друзьями:
Вернуться в раздел: Новости Дата публикации 13 марта , 2025
Читайте также
Комментарии
Войдите или Зарегистрируйтесь И Вы сможете общаться на форуме и оставлять комментарии без капчи.