Большинство устройств не обходится без использования кнопок. Рассмотрим основные способы подключения нормально разомкнутых кнопок к плате ардуино.
Схема с подтягивающим резистором
Через резистор 10 кОм к контакту D4 подтянули напряжение питания +5В. Таким образом, когда кнопка отжата на D4 устанавливается состояние HIGH.
Как только кнопка будет нажата, потенциал +5В будет стянут к общему проводнику GND и на D4 установится значение LOW. В результате, чтобы определить нажата кнопка или нет, необходимо отслеживать состояние контакта D4 и если оно равняется LOW, то кнопка нажата и можно выполнить нужные действия.
#define BTN_PIN 4 // Контакт для кнопки
#define LED_PIN A5 // Контак для светодиода
void setup() {
pinMode(BTN_PIN, INPUT); // Установка режима - вход
pinMode(LED_PIN, OUTPUT); // Установка режима - выход
}
void loop() {
if( !digitalRead(BTN_PIN) ) { // Если на контакте с кнопкой LOW, то выполняем какие либо действия
digitalWrite(LED_PIN, !digitalRead(LED_PIN)); // Например, меняем состояние выхода на противоположное
delay(300); // Антидребезг
}
}
Схема со стягивающим резистором
Здесь все наоборот. Через резистор R1 вход D4 подтянут к общему проводнику GND. Таким образом, когда кнопка разомкнута, на контакте D4 – логический ноль (~0V) или состояние LOW.
Если нажать кнопку, то на D4 установится почти +5В, то есть логическая “1” или HIGH. Соответственно, отслеживать на контакте D4 нужно HIGH.
#define BTN_PIN 4 // Контакт для кнопки
#define LED_PIN A5 // Контак для светодиода
void setup() {
pinMode(BTN_PIN, INPUT); // Установка режима - вход
pinMode(LED_PIN, OUTPUT); // Установка режима - выход
}
void loop() {
if( digitalRead(BTN_PIN) ) { // Если на контакте с кнопкой HIGH, то выполняем какие либо действия
digitalWrite(LED_PIN, !digitalRead(LED_PIN)); // Например, меняем состояние выхода на противоположное
delay(300);
}
}
Схема с использованием внутреннего подтягивающего резистора
Все контакты ардуины подсоединены к шине питания +5В через резисторы 20-50 кОм. И эти резисторы можно программно подключать к выводам или отключать. Для включения нужно вызвать функцию pinMode и в качестве режима передать INPUT_PULLUP:
pinMode(4, INPUT_PULLUP);
Определение состояние кнопки аналогичное со схемой с подтягивающим резистором: если HIGH – кнопка отжата, если LOW – кнопка нажата.
#define BTN_PIN 4 // Контакт для кнопки
#define LED_PIN A5 // Контак для светодиода
void setup() {
pinMode(BTN_PIN, INPUT_PULLUP); // Установка режима - вход с подтягивающим резистором
pinMode(LED_PIN, OUTPUT); // Установка режима - выход
}
void loop() {
if( ! digitalRead(BTN_PIN) ) { // Если на контакте с кнопкой LOW, то выполняем какие либо действия
digitalWrite(LED_PIN, !digitalRead(LED_PIN)); // Например, меняем состояние выхода на противоположное
delay(300);
}
}
Схема подключения кнопки к 12В
Для понижения напряжения используется делитель напряжения из двух резисторов R1 – 1 кОм и R2 – 470 Ом. Конденсатор C1 уменьшает помехи от дребезга контактов кнопки. В результате, при нажатии кнопки на вход D4 поступает уровень ~3,84В. Этого напряжения вполне достаточно, чтобы ардуина определила как HIGH.
#define BTN_PIN 4 // Контакт для кнопки
#define LED_PIN A5 // Контак для светодиода
void setup() {
pinMode(BTN_PIN, INPUT); // Установка режима - вход
pinMode(LED_PIN, OUTPUT); // Установка режима - выход
}
void loop() {
if( digitalRead(BTN_PIN) ) digitalWrite(LED_PIN, HIGH); // Если кнопка нажата, то будет гореть светодиод
else digitalWrite(LED_PIN, LOW); // Нет - так нет
}







Ну и каковы будут преимущества и недостатки у первых двух вариантов подключения кнопок? В каких случаях какой надо выбрать? И нафига здесь нужен третий вариант, ибо я даже не могу представить условий, когда к нему потребуется прибегнуть?! На редкость бессмысленная статья… ((
В статье приведены основные способы подключение кнопок. Если вы не можете себе представить таких условий, это не значит, что их нет. Это значит, что у вас не достаточно знаний. Их вы можете почерпнуть в статье!)