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

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

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

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

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

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

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

Схема на Ардуино: кнопка и светодиод

Для занятия нам понадобятся следующие детали:

  • Плата Arduino Uno;
  • Макетная плата;
  • USB-кабель;
  • 1 светодиод;
  • 2 резистора 220 Ом;
  • 1 тактовая кнопка;
  • Провода «папка-папка» и «папка-мамка».
Схема. Подключение кнопки к Ардуино УНО
Принципиальная схема. Подключение кнопки к Ардуино УНО

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

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

void loop() // процедура 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, пишутся заглавными буквами, иначе компилятор их не распознает и выдаст ошибку.

На что обратить внимание:

  1. Двойное равенство в языке C++ для Ардуино имеет смысл «соответствует»;
  2. Если у вас остались вопросы, то вы можете их задать в комментариях.

Задание для самостоятельного выполнения:

  1. Добавьте в схему еще одну тактовую кнопку, измените скетч так, чтобы светодиод включался только при одновременном нажатии двух кнопок;
  2. Добавьте в схему второй светодиод, измените скетч так, чтобы светодиоды включались от разных кнопок.

«Аналоговые» кнопки на Ардуино

Можно также сделать подключение кнопок к аналоговому входу Ардуино. Электрическая схема при этом принципиально ничем не отличается, основное отличие — это использование аналогового порта на микроконтроллере. Для включения и выключения светодиода будем также использовать встроенный светодиод на плате, подключенный параллельно 13 порту. Скачать готовый скетч knopka2.ino

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

void loop() // процедура loop
{

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

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

}

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

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

На что обратить внимание:

  1. Данные на аналоговых портах могут принимать значения в диапазоне от 0 до 1023.

Задание для самостоятельного выполнения:

  1. Добавьте в скетч функцию просмотра значений на аналоговом входе через монитор порта, используя функции Serial.begin и Serial.print.

1 Star2 Stars3 Stars4 Stars5 Stars (3 votes, average: 3,67 out of 5)
Загрузка...

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

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