
Большинство устройств не обходится без использования кнопок. Рассмотрим основные способы подключения нормально разомкнутых кнопок к плате ардуино.
Схема с подтягивающим резистором
Через резистор 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); // Нет - так нет }