Перейти к содержанию

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

Как подключить кнопку к Ардуино без резистора

Как подключить кнопку к Arduino с резистором, используя цифровые и аналоговые порты платы или, как подключить кнопку к микроконтроллеру Ардуино без резистора. Рассмотрим, как избежать «дребезга контактов», используя конфигурацию портов микроконтроллера INPUT_PULLUP при работе с тактовыми кнопками. Разберем схему подключения одной или нескольких тактовых кнопок к плате Ардуино для включения светодиода.

Необходимые компоненты:

  • Arduino Uno / Arduino Nano / Arduino Mega
  • тактовые кнопки
  • светодиоды
  • резисторы
  • макетная плата
  • коннекторы

Дополнительные материалы на эту тему:

  1. Включение светодиода от кнопки Ардуино
  2. Игра со светодиодами и кнопками Ардуино
  3. Пианино на Ардуино с кнопками и пищалкой

Основной проблемой при использовании кнопок с Arduino Uno является «отскок контактов», см. рисунок ниже. Дело в том, что механические контакты кнопок никогда не замыкаются и не размыкаются мгновенно. Контакты многократно замыкаются и размыкаются в течение нескольких миллисекунд (это период t на диаграмме, показанной ниже) — таким образом, микроконтроллер на входе получает серию импульсов, а не одиночный сигнал.

Управление и программирование кнопки на Ардуино

Управление и программирование кнопки Ардуино

Чтобы микроконтроллер не принимал сигнал от ложных нажатий на кнопку при «дребезге контактов», используются различные электрические цепи с триггерами и конденсаторами. Но удобнее использовать программный метод предотвращения ложного нажатия на кнопку с помощью режима работы порта INPUT_PULLUP и задержки в несколько миллисекунд или с помощью библиотеки Bounce2.h. Первый вариант намного проще и эффективнее.

Как подключить кнопку к Ардуино с резистором

Как подключить кнопку к Ардуино с резистором

В первом примере используйте цифровые порты на плате для подключения кнопки с подтягивающим резистором. Соберите схему, как показано на рисунке выше, и загрузите скетч. Обратите внимание, что когда кнопка отпущена, на пин 2 подается логический «0«, а при нажатии логическая «1» Используйте эту кнопку для включения и выключения светодиода, подключенного к цифровому порту 13 на плате микроконтроллера.

Скетч для кнопки с подтягивающим резистором


#define LED 13
#define BUT 2

void setup() {
  pinMode(LED, OUTPUT);
  pinMode(BUT, INPUT);
}

void loop() {
  if (digitalRead(BUT) == HIGH) {
     digitalWrite(LED, HIGH);
  }

  if (digitalRead(BUT) == LOW) {
     digitalWrite(LED, LOW);
  }
}

Подключение кнопки к Ардуино с резистором

Подключение кнопки к Ардуино с резистором

Также можно подключить кнопки к аналоговому входу Arduino (обозначены на плате как Analog In). Принципиальное отличие этой схемы заключается в использовании аналогового порта микроконтроллера. В программе также будем использовать тактовую кнопку для включения и выключения светодиода, подключенного к пину 13. Переключите кнопку на аналоговый вход A1, как показано на схеме, и загрузите следующий код в плату.

Скетч для кнопки с резистором и светодиодом

#define LED 13
#define BUT A1

void setup() {
  pinMode(LED, OUTPUT);
  pinMode(BUT, INPUT);
}

void loop() {
  if (analogRead(BUT) > 300) {
     digitalWrite(LED, HIGH);
  }

  if (analogRead(BUT) < 300) {
     digitalWrite(LED, LOW);
  }
}

Подключение кнопки Ардуино в режиме INPUT_PULLUP

Подключение кнопки Ардуино в режиме INPUT_PULLUP

pinMode() может использовать режим работы INPUT_PULLUP для конфигурации порта, как показано в этом примере. В этом случае к порту подключается 5 Вольт через встроенный подтягивающий резистор, что позволяет подключать кнопки к Arduino Uno без резистора. Следующая программа реализует возможность считывать нажатия кнопок, при этом будет увеличиваться или уменьшаться переменная (выводится на монитор порта Arduino IDE).

Скетч для кнопки c режимом порта INPUT_PULLUP

#define BT1 2
#define BT2 3

int x;

boolean button1WasUp = true;
boolean button2WasUp = true;

void setup() {
   pinMode(BT1, INPUT_PULLUP);
   pinMode(BT2, INPUT_PULLUP);

   Serial.begin(9600);
}

void loop() {
   boolean button1IsUp = digitalRead(BT1);
   boolean button2IsUp = digitalRead(BT2);

   if (button1WasUp && !button1IsUp) {
      delay(10);
      button1IsUp = digitalRead(BT1);
      if (!button1IsUp) { x = x + 1; Serial.println(x); }
   }
   button1WasUp = button1IsUp;

   if (button2WasUp && !button2IsUp) {
      delay(10);
      button2IsUp = digitalRead(BT2);
      if (!button2IsUp) { x = x - 1; Serial.println(x); }
   }
   button2WasUp = button2IsUp;
}

Заключение. В последнем примере реализована возможность исключения дребезга контактов кнопок на программном уровне. Более подробно вариант подключения в режиме работы цифрового пина INPUT_PULLUP рассмотрено в разделе проекты на Ардуино, где с помощью кнопок производится управление режимом работы адресной ленты. Если у вас остались интересные вопросы по этому обзору — оставляйте их в комментариях к посту.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

newzaym
➜