Глиф Учебники

Как подключить кнопку к Arduino

Справочник · Arduino · 2 минуты чтения

Самый простой способ — без резисторов, с внутренней подтяжкой:

Отпущенная кнопка читается как HIGH, нажатая — как LOW.

Arduino
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:

В скетче pinMode(2, INPUT), нажатие — digitalRead(2) == HIGH. Резистор 10 кОм ограничивает ток при нажатии до 5 / 10 000 = 0,5 мА.

Не соединяйте кнопкой 5V с GND напрямую, без резистора и без вывода между ними: нажатие устроит короткое замыкание питания.

Нажатие срабатывает по нескольку раз

Это дребезг: контакты в момент нажатия несколько раз смыкаются и размыкаются за несколько миллисекунд. Если скетч считает нажатия или переключает что-то по нажатию, ловите переход из HIGH в LOW и после него игнорируйте изменения около 50 мс. Готовые скетчи с разбором — в уроке Кнопка: digitalRead и INPUT_PULLUP, вариант с millis — в уроке millis вместо delay.

Не работает