При разработке устройств часто требуется использовать кнопку, подключённую к плате Arduino. В качестве кнопки обычно используются тактовые кнопки, которые замыкают цепь при нажатии и не пропускают ток в не нажатом состоянии. Но недостаточно просто подключить кнопку к цифровому входу микроконтроллера. В статье показаны нюансы подключения и приведены примеры.
Для примера будем использовать тактовую кнопку. Кнопка имеет 4 вывода. Но на самом деле 4 вывода нужны только для прочного монтажа кнопки на плате. Внутри у неё всего 2 контакта по бокам, каждый из которых выступает за границы корпуса слева и справа. Это хорошо видно на фотографиях кнопки в разборе:
Кнопка без верхней крышки. Разными цветами выделены контакты, соединённые с разными выводами. Рядом с разобранной кнопкой видна металлическая круглая деталь, которая замыкает центральный и боковые контакты при нажатии.
Кнопка в разрезе. Видно, что крайние контакты физически соединены с одним выводом, выходящим с двух сторон. Центральный вывод устроен аналогично.
Важно не перепутать, какие контакты соединены (то есть являются единым целом), а какие должны замыкаться при нажатии. Кнопка подключается одним из контактов к любому цифровому пину Arduino, другим контактом к положительному полюсу питания. Далее нужно настроить пин Arduino, как вход, функцией pinMode() и можно считывать значение с вывода с помощью функции digitalRead(). При нажатии кнопки с вывода будет считываться значение HIGH. На этом можно было бы и закончить, если бы не одно но: в разомкнутом состоянии на ввод будут случайным образом подаваться сигналы LOW и HIGH, потому что такой вывод ни к чему не подключён и «висит в воздухе». Для правильного подключения нужно вывод, к которому подключена кнопка, «подтянуть» к одному из значений. В нашем случае при не нажатой кнопке с пина должно считываться значение LOW, поэтому подтягивать будем к земле.
Для этого необходимо подключать параллельно с кнопкой к выбранному выводу резистор большого номинала (10 КОм и больше), через который будет протекать совсем небольшой ток. Тогда при не нажатой кнопке на пине будет чёткое значение LOW, а при нажатии кнопки наш подтягивающий резистор никак не помешает считать HIGH. Потому что через подтягивающий резистор утечёт совсем немного тока по сравнения с током короткого замыкания пина контроллера на положительный полюс питания.
После сборки схемы загрузите в плату следующую программу:
/*
Переключаем светодиод при нажатии на кнопку
Схема устройства:
* Светодиод подключён к 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.