Подключение тактовой кнопки к Ардуино

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

Работа с тактовыми кнопками на Ардуино

Главная проблема использования кнопок для управления Arduino заключается в «дребезге контактов». Дело в том, что механические контакты в тактовых кнопках никогда не замыкаются и размыкаются мгновенно. В течении нескольких миллисекунд происходит многократное замыкание и размыкание контактов — в итоге на микроконтроллер поступает не единичный сигнал, а серия импульсов.

Подключение кнопки к Ардуино и дребезг
Подключение кнопки к Ардуино и дребезг

Для того, чтобы исключить на микроконтроллере Arduino дребезг кнопки используют различные электрические схемы с триггерами и конденсаторами. Но намного удобнее и проще использовать программный способ борьбы с возможным дребезгом тактовой кнопки — для этого применяют задержку на несколько миллисекунд или используют библиотеку Bounce2.h для борьбы с дребезгом контактов для Arduino.

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

Для этого занятия потребуется:

  • Arduino Uno / Arduino Nano / Arduino Mega;
  • макетная плата;
  • 1 светодиод;
  • резисторы на 220 Ом и 10 кОм;
  • 1 тактовая кнопка;
  • провода «папа-папа» и «папа-мама».
Схема. Подключение кнопки к Ардуино Уно
Схема подключения кнопки к Ардуино Уно

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

Скетч Ардуино подключение кнопки к цифровому входу

void setup() {
   pinMode(13, OUTPUT); // объявляем пин 13 как выход
   pinMode(2, INPUT); // объявляем пин 2 как вход
}

void loop() {
   if (digitalRead(2) == HIGH) // когда на пин 2 поступает высокий сигнал
   {
      digitalWrite(13, HIGH); // зажигаем светодиод
   }

   if (digitalRead(2) == LOW) // когда на пин 2 поступает низкий сигнал
   {
      digitalWrite(13, LOW); // выключаем светодиод
   }
}

Пояснения к коду:

  1. процедура setup выполняется один раз, используется процедура для конфигурации портов микроконтроллера (назначение режима работы портов);
  2. процедуры setup и loop должны присутствовать в любой программе (скетче);
  3. использованные константы: INPUT, OUTPUT, LOW, HIGH, пишутся заглавными буквами, иначе компилятор их не распознает и выдаст ошибку.



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

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

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

Скетч Ардуино подключение кнопки к аналоговому входу

void setup() {
   pinMode(13, OUTPUT); // объявляем пин 13 как выход
   pinMode(A1, INPUT); // объявляем пин A1 как вход
}

void loop() {
   if (analogRead(A1) > 300) // когда аналоговая кнопка нажата
   {
      digitalWrite(13, HIGH); // зажигаем светодиод
   }

   if (analogRead(A1) < 300) // когда аналоговая кнопка отпущена
   {
      digitalWrite(13, LOW); // выключаем светодиод
   }
}

Пояснения к коду:

  1. в данном скетче мы используем функцию analogRead для считывания значений с аналогового входа A1, при этом порт можно использовать, как цифровой;
  2. значения на аналоговом входе могут отличаться (все зависит от сопротивления резистора в схеме) и могут принимать значения в диапазоне от 0 до 1023.

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

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

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

Скетч: подключение кнопки к Ардуино input_pullup

int x;

boolean button1WasUp = true;   // переменные для считывания нажатия на кнопки
boolean button2WasUp = true;

void setup() {
   pinMode(2, INPUT_PULLUP);   // подключаем тактовые кнопки
   pinMode(3, INPUT_PULLUP);

   Serial.begin(9600);
}

void loop() {
   boolean button1IsUp = digitalRead(2);   // узнаем текущее состояние кнопок
   boolean button2IsUp = digitalRead(3);

   // если кнопка 1 была нажата, увеличиваем переменную "x"
   if (button1WasUp && !button1IsUp) {
     delay(10);
     button1IsUp = digitalRead(2);
     if (!button1IsUp) { x = x + 1; Serial.println(x); }
   }
   button1WasUp = button1IsUp; // запоминаем состояние кнопки 1

   // если кнопка 2 была нажата, уменьшаем переменную "x"
   if (button2WasUp && !button2IsUp) {
     delay(10);
     button2IsUp = digitalRead(3);
     if (!button2IsUp) { x = x - 1; Serial.println(x); }
   }
   button2WasUp = button2IsUp; // запоминаем состояние кнопки 2

}

Пояснения к коду:

  1. задержка delay(10); необходима в программе для исключения влияния дребезга контактов и ложного срабатывания кнопки;
  2. переменная ‘x’ будет выводиться на монитор порта при нажатии на кнопку.

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



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

  1. А почему у нас идёт проверка данных с пинов 8 и 10, хотя они изначально не обозначены? И для чего мы запоминаем значения кнопок?

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

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.