Подключение датчика кнопки к ардуино требует определенных знаний и навыков. В этой статье мы поговорим о том, что такое тактовая кнопка, что такое дребезг кнопки, как правильно подключать кнопку с подтягивающим и стягивающим резистором, как можно управлять с помощью кнопки светодиодами и другими устройствами.
Содержание
Кнопка ардуино

Тактовые кнопки и кнопки-переключатели
Как обычно, начинаем раздел с Pin-Up вещей, интересных только начинающим. Если вы владеете азами и хотите узнать о различных вариантах подключения кнопки к ардуино - можете пропустить этот параграф.
Что такое кнопка? По сути, это достаточно простое устройство, замыкающее и размыкающее электрическую сеть. Выполнять это замыкание Соответственно, все кнопки можно Pin-Up на две большие группы:
- Кнопки переключатели с фиксацией. Они возвращаются в Pin-Up состояние после того, как их отпустили. При в зависимости от начального состояния разделяют на нормально-замкнутые и нормально-разомкнутые кнопки.
- Кнопки без фиксации (тактовые кнопки). Они фиксируются и остаются в том положении, в Pin-Up их оставили.
Pin-Up различных кнопок великое множество, это действительно один из самых распространенных видов электронных компонентов.








Кнопки ардуино для простых проектов
В наших проектах мы будем работать с очень простыми тактовыми кнопками с 4 ножками, которые идут практически в любом наборе ардуино. Кнопка представляет собой переключатель с двумя парами контактов. Контакты в одной паре соединены между собой, поэтому Pin-Up одного выключателя в схеме реализовать не удастся, но вы можете одновременно управлять двумя параллельными сегментами, это бывает полезно.
В зависимости от ситуации, вы можете создавать как схемы с Pin-Up замкнутыми, так и с нормально разомкнутыми контактами - для этого нужно будет только соответствующим образом выполнить соединение в схеме.
Для удобства работы в комплекте с тактовой кнопкой обычно идет пластмассовый колпачок какого-то цвета, он достаточно очевидно надевается на кнопку и придает проекту Pin-Up хакерский вид.
Подключение кнопки Ардуино
Включение и выключение Pin-Up с помощью кнопки
Давайте начнем с самого Pin-Up способа подключения тактовой кнопки. Рассмотрим схему с Arduino в качестве источника питания, светодиода, ограничительного резистора номиналом 220 Ом и кнопки, которая будет замыкать и размыкать цепь.
При подключении кнопки с двумя парами ножек важно правильно выбрать размыкающие контакты. Посмотрите на изображение внимательно: пары ножек расположены по бокам кнопки. Сама кнопка квадратная, но расстояния между парами контактов визуально заметны: можно сразу выделить два на одной стороне и два а другой. Так вот, именно Pin-Up одной «парой» на стороне и будет реализован выключатель. Для включения в схему мы соединяемся с одним и с другим контактом, между которыми минимальное расстояние. Вторая пара контактов просто дублирует первую.


Если у вас переключатель другого типа, то можете смело выбрать контакты с противоположных углов (на некоторых кнопка делается специальный знак в виде выемки, по которому можно определить, с Pin-Up стороны расположены спаренные контакты). Самый надежный способ определить правильные ножки - это прозвонить контакты тестером.
Сама схема с кнопкой, светодиодом и контроллером Arduino не нуждается в особых пояснениях. Кнопка разрывает цепь, светодиод не горит. При нажатии цепь замыкается, светодиод включается. Если вы перепутаете контакты (включите через замкнутые спаренные контакты кнопки), то кнопка работать не Pin-Up потому что цепь никогда не разомкнется. Просто поменяйте контакты местами.
Подключение кнопки с подтягивающим резистором
Давайте теперь подключим кнопку к ардуино так, чтобы можно Pin-Up считывать в скетче ее состояние. Для этого воспользуемся следующей схемой.
В скетче мы Pin-Up отслеживать факт нажатия и выводить сообщение в монитор порта. Более интересный пример и подробное объяснение самой схемы мы приведем чуть позже.
Следует обратить внимание на сопротивление 10 К, которое мы добавили в Pin-Up схеме. Более подробно о его предназначении мы поговорим позже, просто имейте в виду, что такой резистор необходим для правильной работы схемы.
Pin-Up для кнопки ардуино с подтягивающим резистором:
Кнопка подключена к пину 2. *begin(9600); pinMode(PIN_LED, OUTPUT); } Pin-Up loop() { /println(buttonState); delay(50); }Подключение кнопки в режиме INPUT_PULLUP
В указанной Pin-Up схеме мы использовали резистор, называемый подтягивающим, для формирования определенного уровня сигнала на цифровом порту. Но есть другой способ подключить кнопку без резистора, используя внутренне сопротивление платы ардуино. В блоке setup мы должны всего лишь определить тип пина, к которому подключим кнопку, как INPUT_PULLUP.
pinMode(PIN_BUTTON, INPUT_PULLUP);
Альтернативным вариантом будет выбрать режим пина как Pin-Up и установить на данный порт высокий уровень сигнала. Встроенный подтягивающий резистор подключиться автоматически.
pinMode(PIN_BUTTON, INPUT_PULLUP); digitalWrite(PIN_BUTTON, HIGH);
И все. Можно собрать вот такую сложную схему и Pin-Up с кнопкой в скетче.
Мигание светодиода после Pin-Up на кнопку
В предыдущем примере со светодиодами мы подключили кнопку к плате ардуино и поняли, как она работает. Светодиод включался и выключался, но делал это в совершенно пассивном режиме - сам контроллер здесь был абсолютно лишним, его можно было бы заменить батарейками. Поэтому давайте сделаем наш новый проект более «интеллектуальным»: при нажатии на кнопку заставим светодиод непрерывно мигать. Pin-Up схемой с лампочкой и выключателем этого уже не сделаешь - мы будем использовать мощь нашего микроконтроллера для решения этой пусть и простой, но не тривиальной задачи.
Pin-Up схема проекта изображена на рисунке:
Фрагмент схемы со светодиодом уже хорошо нам знаком. Мы собрали обычный маячок со светодиодом и ограничительным резистором. А вот во второй части мы видим знакомую нам кнопку и еще один резистор. Пока не будем вдаваться в подробности, просто соберем схему и закачаем в ардуино простой скетч. Все элементы Pin-Up идут в самых простых стартовых наборах ардуино.
Кнопка подтянута к земле, нажатию соответствует HIGH на входе *begin(9600); pinMode(PIN_LED, OUTPUT); } void loop() { /println(buttonState); // Если кнопка не нажата, то ничего не делаем if (!buttonState) { delay(50); return; } // Этот блок кода будет выполняться, если Pin-Up нажата // Мигаем светодиодом digitalWrite(PIN_LED, HIGH); delay(1000); digitalWrite(PIN_LED, LOW); delay(1000); }Нажимаем и держим - светодиод мигает. Отпускаем - он гаснет. Именно то , что хотели. Хлопаем от радости в ладоши и приступаем к анализу того, что Pin-Up
Pin-Up посмотрим на скетч. В нем мы видим довольно простую логику.
- Определяем, нажата ли кнопка.
- Если кнопка не Pin-Up то просто выходим из метода loop, ничего не включая и не меняя.
- Если кнопка Pin-Up то выполняем мигание, используя фрагмент стандартного скетча:
- Pin-Up светодиод, подавая напряжение на нужный порт
- Pin-Up нужную паузу при включенном светодиоде
- Выключаем светодиод
- Делаем нужную паузу при выключенном Pin-Up
Логика поведения кнопки в скетче может зависеть от способа подключения с Pin-Up резистором. Об этом мы поговорим в следующей статье.
Дребезг кнопки ардуино
В процессе работы с кнопками мы можем столкнуться с очень неприятным явлением, называемым дребезгом кнопки. Как следует из самого названия, явление это обуславливается дребезгом контактов внутри кнопочного переключателя. Металлические пластины соприкасаются друг с другом не мгновенно (хоть и очень быстро для наших глаз), поэтому на короткое время в зоне контакта возникают скачки и провалы напряжения. Если мы не предусмотрим появление Pin-Up “мусорных” сигналов, то будем реагировать на них каждый раз и можем привести наш проект к хаусу.
Для устранения дребезга используют программные и аппаратные решения. В двух Pin-Up лишь упомянем основные методы подавления дребезга:
- Добавляем в скетче паузу Pin-Up миллисекунд между полкучением значений с пина ардуино.
- Если мы используем прерывания, то программный Pin-Up использоваться не может и мы формируем аппаратную защиту. Простейшая из них - RC фильтр с конденсатором и сопротивлением.
- Для более точного подавления дребезга используется Pin-Up фильтр с использованием триггера шмидта. Этот вариант позволит получить на входе в ардуино сигнал практически идеальной формы.
Более подробную информацию о способах борьбы с дребезгом вы Pin-Up найти в этойстатье об устранении дребезга кнопок.
Переключение режимов с помощью кнопки
Для того, чтобы определить, была ли нажата кнопка, надо просто Pin-Up факт ее нажатия и сохранить признак в специальной переменной.
Факт нажатия мы определяем с помощью функции Pin-Up В результате мы получим HIGH (1, TRUE) или LOW(0, FALSE), в зависимости от того, как подключили кнопку. Если мы подключаем кнопку с помощью внутреннего подтягивающего резистора, то нажатие кнопки приведет к появлению на входе уровня 0 (FALSE).
Для хранения информации о нажатии на Pin-Up можно использовать переменную типа boolean:
boolean keyPressed = digitalRead(PIN_BUTTON)==LOW;
Pin-Up мы используем такую конструкцию, а не сделали так:
boolean keyPressed = digitalRead(PIN_BUTTON);
Все дело в том, что digitalRead() может вернуть HIGH, но оно не будет означать нажатие кнопки. В случае использования схемы с подтягивающим резистором HIGH будет означать, что кнопка, наоборот, не нажата. В первом варианте (digitalRead(PIN_BUTTON)==LOW ) мы сразу сравнили вход с нужным нам значением и определили, что кнопка нажата, хотя и на входе сейчас низкий уровень сигнала. И сохранили в переменную статус кнопки. Старайтесь явно указывать все выполняемые вами логические операции, чтобы Pin-Up свой код более прозрачным и избежать лишних глупых ошибок.
Как переключать режимы работы после нажатия Pin-Up
Часто возникает Pin-Up когда мы с помощью кнопок должны учитывать факт не только нажатия, но и отпускания кнопки. Например, нажав и отпустив кнопку, мы можем включить свет или переключить режим работы схемы. Другими словами, нам нужно как-то зафиксировать в коде факт нажатия на кнопку и использовать информацию в дальнейшем, даже если кнопка уже не нажата. Давайте посмотрим, как это можно сделать.
Логика работы программы очень проста:
- Запоминаем Pin-Up нажатия в служебной переменной.
- Ожидаем, Pin-Up не пройдут явления, связанные с дребезгом.
- Ожидаем факта отпускания кнопки.
- Запоминаем факт отпускания и устанавливаем в Pin-Up переменной признак того, что кнопка была полноценно нажата.
- Очищаем служебную переменную.
Как определить нажатие нескольких кнопок?
Нужно просто запомнить состояние каждой из кнопок в соответствующей переменной или в массиве ардуино. Здесь главное понимать, что каждая новая кнопка - это занятый пин. Поэтому если количество кнопок у вас будет большим, то возможно возникновение дефицита Pin-Up контактов. Альтернативным вариантом является использование подключения кнопок на один аналоговый пин по схеме с резистивным делителем. Об этом мы поговорим в следующих статьях.















