Как подключить кнопку к Arduino с резистором, используя цифровые и аналоговые порты платы или, как подключить кнопку к микроконтроллеру Ардуино без резистора. Рассмотрим, как избежать «дребезга контактов», используя конфигурацию портов микроконтроллера INPUT_PULLUP при работе с тактовыми кнопками. Разберем схему подключения одной или нескольких тактовых кнопок к плате Ардуино для включения светодиода.
СОДЕРЖАНИЕ
Необходимые компоненты:
- Arduino Uno / Arduino Nano / Arduino Mega
- тактовые кнопки
- светодиоды
- резисторы
- макетная плата
- коннекторы
Дополнительные материалы на эту тему:
Основной проблемой при использовании кнопок с Arduino Uno является «отскок контактов», см. рисунок ниже. Дело в том, что механические контакты кнопок никогда не замыкаются и не размыкаются мгновенно. Контакты многократно замыкаются и размыкаются в течение нескольких миллисекунд (это период t на диаграмме, показанной ниже) — таким образом, микроконтроллер на входе получает серию импульсов, а не одиночный сигнал.
Управление и программирование кнопки на Ардуино

Чтобы микроконтроллер не принимал сигнал от ложных нажатий на кнопку при «дребезге контактов», используются различные электрические цепи с триггерами и конденсаторами. Но удобнее использовать программный метод предотвращения ложного нажатия на кнопку с помощью режима работы порта INPUT_PULLUP и задержки в несколько миллисекунд или с помощью библиотеки Bounce2.h. Первый вариант намного проще и эффективнее.
Как подключить кнопку к Ардуино с резистором

В первом примере используйте цифровые порты на плате для подключения кнопки с подтягивающим резистором. Соберите схему, как показано на рисунке выше, и загрузите скетч. Обратите внимание, что когда кнопка отпущена, на пин 2 подается логический «0«, а при нажатии логическая «1» Используйте эту кнопку для включения и выключения светодиода, подключенного к цифровому порту 13 на плате микроконтроллера.
Скетч для кнопки с подтягивающим резистором
#define LED 13
#define BUT 2
void setup() {
pinMode(LED, OUTPUT);
pinMode(BUT, INPUT);
}
void loop() {
if (digitalRead(BUT) == HIGH) {
digitalWrite(LED, HIGH);
}
if (digitalRead(BUT) == LOW) {
digitalWrite(LED, LOW);
}
}
Подключение кнопки к Ардуино с резистором

Также можно подключить кнопки к аналоговому входу Arduino (обозначены на плате как Analog In). Принципиальное отличие этой схемы заключается в использовании аналогового порта микроконтроллера. В программе также будем использовать тактовую кнопку для включения и выключения светодиода, подключенного к пину 13. Переключите кнопку на аналоговый вход A1, как показано на схеме, и загрузите следующий код в плату.
Скетч для кнопки с резистором и светодиодом
#define LED 13
#define BUT A1
void setup() {
pinMode(LED, OUTPUT);
pinMode(BUT, INPUT);
}
void loop() {
if (analogRead(BUT) > 300) {
digitalWrite(LED, HIGH);
}
if (analogRead(BUT) < 300) {
digitalWrite(LED, LOW);
}
}
Подключение кнопки Ардуино в режиме INPUT_PULLUP

pinMode() может использовать режим работы INPUT_PULLUP для конфигурации порта, как показано в этом примере. В этом случае к порту подключается 5 Вольт через встроенный подтягивающий резистор, что позволяет подключать кнопки к Arduino Uno без резистора. Следующая программа реализует возможность считывать нажатия кнопок, при этом будет увеличиваться или уменьшаться переменная (выводится на монитор порта Arduino IDE).
Скетч для кнопки c режимом порта INPUT_PULLUP
#define BT1 2
#define BT2 3
int x;
boolean button1WasUp = true;
boolean button2WasUp = true;
void setup() {
pinMode(BT1, INPUT_PULLUP);
pinMode(BT2, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
boolean button1IsUp = digitalRead(BT1);
boolean button2IsUp = digitalRead(BT2);
if (button1WasUp && !button1IsUp) {
delay(10);
button1IsUp = digitalRead(BT1);
if (!button1IsUp) { x = x + 1; Serial.println(x); }
}
button1WasUp = button1IsUp;
if (button2WasUp && !button2IsUp) {
delay(10);
button2IsUp = digitalRead(BT2);
if (!button2IsUp) { x = x - 1; Serial.println(x); }
}
button2WasUp = button2IsUp;
}
Заключение. В последнем примере реализована возможность исключения дребезга контактов кнопок на программном уровне. Более подробно вариант подключения в режиме работы цифрового пина INPUT_PULLUP рассмотрено в разделе проекты на Ардуино, где с помощью кнопок производится управление режимом работы адресной ленты. Если у вас остались интересные вопросы по этому обзору — оставляйте их в комментариях к посту.
