МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ
КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ
Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования
«Московский технический университет связи и информатики»
(МТУСИ)
Кафедра «Интеллектуальные системы в управлении и автоматизации»
(ИСУиА)
ПРАКТИЧЕСКАЯ РАБОТА №2
По дисциплине
Технологии промышленного интернета вещей
Выполнили:
Студенты 4-го курса
Группы БАП2201
Ли Самен
Мягков А.К.
Проверил:
к.т.н., доцент
Воронов В.И.
Москва 2026
СОДЕРЖАНИЕ
ВЫПОЛНЕНИЕ 3
ВЫВОДЫ 5
Дребезг кнопки
В процессе работы с кнопками мы можем столкнуться явлением, называемым дребезгом кнопки. Как следует из самого названия, явление это обуславливается дребезгом контактов внутри кнопочного переключателя. Металлические пластины соприкасаются друг с другом не мгновенно (хотя и очень быстро), поэтому на короткое время в зоне контакта возникают скачки и провалы напряжения. Если мы не предусмотрим появление таких «мусорных» сигналов, то будем реагировать на них каждый раз.
Для устранения дребезга используют программные и аппаратные решения. В двух словах лишь упомянем основные методы подавления дребезга:
– Добавляем в скетче паузу 10-50 миллисекунд между получением значений с пина Ардуино.
– Если мы используем прерывания, то программный метод использоваться не может, и мы формируем аппаратную защиту. Простейшая из них – RC фильтр с конденсатором и сопротивлением.
– Для более точного подавления дребезга используется аппаратный фильтр с использованием триггера Шмидта. Этот вариант позволит получить на входе в Ардуино сигнал практически идеальной формы.
Программный способ устранения дребезга кнопок
Самым простым способом справиться с проблемой дребезга кнопки является выдерживание паузы. Мы просто останавливаемся и ждем, пока переходный процесс не завершится. Для этого можно использовать функцию delay() или millis(). 10-50 миллисекунд – вполне достаточное значение паузы для большинства случаев.
Листинг 1 – Программный способ устранения дребезга кнопок |
int currentVa1ue, prevVa1ue; void 1оор(){ currentva1ue = digitalRead(PIN_BUTTON); if (currentVa1ue != prevValue){ // Что-то изменилось, здесь возможна зона неопределенности // делаем задержку de1ay{10); // А вот теперь спокоЙно считываем значение, считая, что нестабильность исчезла currentVa1ue = digita1Read(PIN_BUTTON); } prevVa1ue = currentVa1ue ; Seria1.print1n (currentVa1ue); } |
ВЫПОЛНЕНИЕ
На рисунке 1 представлена схема подключения из TinkerCAD по реализации рабочей схемы мигания лампочкой через кнопку.
Рисунок 1 – Подключение кнопки и светодиода к плате Arduino UNO
В листинге 2 приведён пример программирования схемы со стягивающим резистором.
Листинг 2 – Программирование кнопки и светодиода |
const int PIN_BUTTON = 2; const int PIN_LED = 13;
void setup() { Serial.begin(9600); pinMode(PIN_LED, OUTPUT); }
void loop() { int buttonState = digitalRead(PIN_BUTTON); // Получаем состояние кнопки Serial.println(buttonState);
if (!buttonState) { // Если кнопка не нажата, то ничего не делаем delay(50); return; }
// Этот блок кода будет выполняться, если кнопка нажата // Мигаем светодиодом digitalWrite(PIN_LED, HIGH); delay(1000); digitalWrite(PIN_LED, LOW); delay(1000); }
|
Нажимаем и держим – светодиод мигает, отпускаем – он гаснет. Приступаем к анализу проделанного.
В скетче мы видим следующую логику:
1) Определяем, зажата ли кнопка.
2) Если кнопка не зажата, то просто выходим из метода loop(), ничего не включая и не меняя.
3) Если кнопка зажата, то выполняем мигание, используя фрагмент стандартного скетча:
3.1) Включаем светодиод, подавая напряжение на нужный порт.
3.2) Делаем нужную паузу при включенном светодиоде.
3.3) Выключаем светодиод.
3.4) Делаем нужную паузу при выключенном светодиоде.
На рисунке 3 представлена физическая реализация на ESP32 по миганию лампочкой.
Рисунок 3 – Горящая лампочка без (сверху) и с (снизу) включённой кнопкой по схеме со стягивающим резистором на ESP32
ВЫВОДЫ
Собрана схема подключения кнопки и светодиода к микроконтроллеру, а также написан скетч с использованием программного подавления дребезга контактов. Практически на EPS32 реализован режим мигания светодиода при удержании кнопки.
