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

При разработке устройств часто требуется использовать кнопку, подключённую к плате Arduino. В качестве кнопки обычно используются тактовые кнопки, которые замыкают цепь при нажатии и не пропускают ток в не нажатом состоянии. Но недостаточно просто подключить кнопку к цифровому входу микроконтроллера. В статье показаны нюансы подключения и приведены примеры.

Для примера будем использовать тактовую кнопку. Кнопка имеет 4 вывода. Но на самом деле 4 вывода нужны только для прочного монтажа кнопки на плате. Внутри у неё всего 2 контакта по бокам, каждый из которых выступает за границы корпуса слева и справа. Это хорошо видно на фотографиях кнопки в разборе:

Кнопка без верхней крышки

Кнопка без верхней крышки. Разными цветами выделены контакты, соединённые с разными выводами. Рядом с разобранной кнопкой видна металлическая круглая деталь, которая замыкает центральный и боковые контакты при нажатии.

Кнопка в разрезе

Кнопка в разрезе. Видно, что крайние контакты физически соединены с одним выводом, выходящим с двух сторон. Центральный вывод устроен аналогично.

Важно не перепутать, какие контакты соединены (то есть являются единым целом), а какие должны замыкаться при нажатии. Кнопка подключается одним из контактов к любому цифровому пину Arduino, другим контактом к положительному полюсу питания. Далее нужно настроить пин Arduino, как вход, функцией pinMode() и можно считывать значение с вывода с помощью функции digitalRead(). При нажатии кнопки с вывода будет считываться значение HIGH. На этом можно было бы и закончить, если бы не одно но: в разомкнутом состоянии на ввод будут случайным образом подаваться сигналы LOW и HIGH, потому что такой вывод ни к чему не подключён и «висит в воздухе». Для правильного подключения нужно вывод, к которому подключена кнопка, «подтянуть» к одному из значений. В нашем случае при не нажатой кнопке с пина должно считываться значение LOW, поэтому подтягивать будем к земле.

Для этого необходимо подключать параллельно с кнопкой к выбранному выводу резистор большого номинала (10 КОм и больше), через который будет протекать совсем небольшой ток. Тогда при не нажатой кнопке на пине будет чёткое значение LOW, а при нажатии кнопки наш подтягивающий резистор никак не помешает считать HIGH. Потому что через подтягивающий резистор утечёт совсем немного тока по сравнения с током короткого замыкания пина контроллера на положительный полюс питания.

Схема подключения кнопки к Arduino

Схема подключения кнопки к Arduino

После сборки схемы загрузите в плату следующую программу:

/*
Переключаем светодиод при нажатии на кнопку

 Схема устройства:
 * Светодиод подключён к 13 пину (встроенный светодиод)
 * Тактовая кнопка подключена ко 2му пину
 * Резистор 10кОм используется для подтяжки 2го пина к земле

*/

//Задаём константы
// set pin numbers:
const int buttonPin = 2;// Номер пина, к которому подключена кнопка
const int ledPin =  13; // Номер пина, к которому подключен светодиод

//Объявляем переменные
int buttonState = 0;     // Переменная для хранения статуса кнопки

void setup() {
  // Настраиваем вывод, к которому подключён светодиод, как выход
  pinMode(ledPin, OUTPUT);
  // Настраиваем вывод, к которому подключена кнопка, как вход
  pinMode(buttonPin, INPUT);
}

void loop(){
  // Считываем состояние кнопки
  buttonState = digitalRead(buttonPin);

  // Проверяем, нажата ли кнопка
  // Если нажата, на пин с кнопкой поступит значение HIGH
  if (buttonState == HIGH) {
    // Включаем светодиод
    digitalWrite(ledPin, HIGH);
  }
  else {
    // Выключаем светодиод
    digitalWrite(ledPin, LOW);
  }
}

Или просто откройте стандартный пример среды arduino, выбрав пример Button.

Выбор стандартного примера с кнопкой

Выбор стандартного примера с кнопкой в среде разработки arduino