Подключение кнопок к ардуино

Подключени

Большинство устройств не обходится без использования кнопок. Рассмотрим основные способы подключения нормально разомкнутых кнопок к плате ардуино.

Схема с подтягивающим резистором

Через резистор 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В

Для понижения напряжения используется делитель напряжения из двух резисторов R11 кОм и R2470 Ом. Конденсатор C1 уменьшает помехи от дребезга контактов кнопки. В результате, при нажатии кнопки на вход D4 поступает уровень ~3,84В. Этого напряжения вполне достаточно, чтобы ардуина определила как HIGH.

Подключение кнопки к 12В. Согласование уровней +12В и +5В
#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);                        // Нет - так нет
}
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии