Как подключить кнопку к Arduino
Самый простой способ — без резисторов, с внутренней подтяжкой:
- одна ножка кнопки — к выводу
2; - другая ножка — к
GND; - в скетче —
pinMode(2, INPUT_PULLUP).
Отпущенная кнопка читается как HIGH, нажатая — как LOW.
const int BUTTON = 2;
void setup() {
pinMode(BUTTON, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
if (digitalRead(BUTTON) == LOW) {
Serial.println("Нажата");
} else {
Serial.println("Отпущена");
}
delay(200);
}Откройте монитор порта (скорость 9600) и нажмите кнопку — сообщения сменятся.
Почему нужна подтяжка
Вход, который ни к чему не подключён, «висит в воздухе» и читается случайно — то HIGH, то LOW. Пока кнопка отпущена, она вывод ни к чему не подключает. INPUT_PULLUP включает внутри микроконтроллера резистор (около 20–50 кОм) от вывода к 5 В — он и держит вход в HIGH, пока кнопка не соединит его с GND.
Какие ножки у тактовой кнопки
У обычной кнопки 6×6 мм четыре ножки, соединённые внутри попарно: две пары соединены всегда, а нажатие соединяет пары между собой. Чтобы не ошибиться, используйте две ножки по диагонали — они точно разные. Кнопку на макетной плате ставят поперёк канавки.
Со стягивающим резистором
Если нужна логика «нажата — HIGH», поставьте внешний резистор к GND:
5V→ ножка кнопки;- другая ножка → вывод
2; - вывод
2→ резистор 10 кОм →GND.
В скетче pinMode(2, INPUT), нажатие — digitalRead(2) == HIGH. Резистор 10 кОм ограничивает ток при нажатии до 5 / 10 000 = 0,5 мА.
Не соединяйте кнопкой 5V с GND напрямую, без резистора и без вывода между ними: нажатие устроит короткое замыкание питания.
Нажатие срабатывает по нескольку раз
Это дребезг: контакты в момент нажатия несколько раз смыкаются и размыкаются за несколько миллисекунд. Если скетч считает нажатия или переключает что-то по нажатию, ловите переход из HIGH в LOW и после него игнорируйте изменения около 50 мс. Готовые скетчи с разбором — в уроке Кнопка: digitalRead и INPUT_PULLUP, вариант с millis — в уроке millis вместо delay.
Не работает
- Срабатывает сама — забыт
INPUT_PULLUPили резистор, вход висит в воздухе. - Не реагирует — использованы ножки одной пары (они соединены всегда) или обе ножки в одной пятёрке макетной платы. Возьмите ножки по диагонали.
- Всё наоборот — с
INPUT_PULLUPнажатие даётLOW, это нормально. - Кнопка на выводе 13 — к нему на плате подключён светодиод, он мешает подтяжке. Возьмите другой вывод.
- Длинные провода (метры) ловят помехи: добавьте внешний резистор 4,7–10 кОм к 5 В в дополнение к внутреннему.