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

Содержание
  1. Кнопка ардуино
  2. Тактовые кнопки и кнопки-переключатели
  3. Кнопки ардуино для простых проектов
  4. Инструкция по подключению кнопки
  5. Без резистора
  6. С использованием подтягивающего резистора
  7. В режиме input-pullup
  8. Подключение кнопки по схеме с подтягивающим резистором
  9. Включение-выключение с помощью кнопки
  10. digitalRead()
  11. Подключение модуля тактовых кнопок ROC к Ардуино
  12. Аналоговые клавиатуры
  13. Скетч
  14. Необходимые компоненты
  15. Дребезг контактов
  16. Программа
  17. Вопросы для проверки себя
  18. Подключение и подтяжка
  19. Подключение кнопки Ардуино
  20. Включение и выключение светодиода с помощью кнопки
  21. Подключение кнопки с подтягивающим резистором
  22. Принцип работы
  23. Подключение к Ардуино Уно
  24. Как переключать режимы кнопкой
  25. Digital: Debounce (Дребезг)
  26. Подключение кнопки в режиме INPUT_PULLUP
  27. Мигание светодиода после нажатия на кнопку
  28. Видео
  29. Алгоритмы
  30. Отработка нажатия
  31. Дребезг контактов
  32. “Импульсное” удержание
  33. Простейший класс кнопки
  34. Другие возможности кнопки
  35. Дребезг кнопки ардуино
  36. 02.Digital: Button
  37. Переключение режимов с помощью кнопки
  38. Как переключать режимы работы после нажатия кнопки?
  39. Некорректное подключение кнопки

Кнопка ардуино

Подключение кнопки к ардуиноКнопочный переключатель (или кнопочный переключатель) — самый простой и доступный из всех типов датчиков. Нажатие на нее дает контроллеру сигнал, который затем приводит к действию: загораются светодиоды, раздаются звуки, запускаются моторы. В своей жизни мы часто сталкиваемся с разными переключателями и хорошо знакомы с этим устройством.

Тактовые кнопки и кнопки-переключатели

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

Что такое кнопка? По сути, это довольно простое устройство, которое замыкает и отключает электрическую сеть. Это закрытие / открытие может выполняться по-разному, фиксируя или не фиксируя свое положение. Следовательно, все кнопки можно разделить на две большие группы:

  • Кнопки-защелки. После освобождения они возвращаются в исходное состояние. Когда, в зависимости от начального состояния, они делятся на нормально закрытые и нормально открытые кнопки.
  • Мгновенные кнопки (тактильные кнопки). Они фиксируются и остаются в том положении, в котором были оставлены.

Есть много вариантов различных кнопок; Фактически это один из самых распространенных типов электронных компонентов.

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

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

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

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

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

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

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

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

Кнопки ардуино для простых проектов

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

В зависимости от ситуации возможно создание как контуров с нормально замкнутыми, так и с нормально разомкнутыми контактами — для этого достаточно произвести соответствующее соединение в контуре.

Для удобства кнопка с часами обычно идет с пластиковой крышкой определенного цвета, она достаточно очевидна для вставки и придает проекту менее хакерский вид.

Инструкция по подключению кнопки

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

Схема

Без резистора

Перед подключением обратите внимание на размыкающие контакты. По бокам квадратного датчика расположены 2 ножки, а в центре ножек создан переключатель. Для включения датчика нужно соединить 2 контактами как можно ближе друг к другу. Остальные 2 будут повторять первую пару.

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

В этой схеме датчик поднимается резистором на «плюс» и замыкает вход на «землю». Чтобы сопротивление работало правильно, добавьте сопротивление 10 кОм, при таком значении оно сможет притягивать контакт к «земле».

Есть 3 провода для подключения к платформе. Присоедините первую к одной из ножек, проложите резистор и заземлите. Следующий подключается ко второй ноге, к выводу Arduino с напряжением 5 вольт. Подключите последний к третьему, который не имеет контакта ни с одним из двух предыдущих, и подключите его ко второму цифровому устройству, которое будет считывать состояние кнопки.

На эскизе этой схемы нажатая кнопка обозначена как LOW, а кнопка, которая вернулась в исходное (отпущенное) положение, обозначена как HIGH.

В режиме input-pullup

Это позволяет обойтись без резистора при подключении и работе. В этом случае используется внутреннее сопротивление самой платы. Чтобы написать алгоритм, вам нужно определить контакт, к которому вы собираетесь подключить кнопку, как INPUT_PULLUP.

Существует альтернативная версия, в которой вывод OUTPUT может использоваться вместо указанной команды.

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

Сначала мы подключаем кнопку к Arduino, используя схему подтягивающего резистора. Для этого подключите один контакт кнопки к массе, а другой к цифровому выходу «2». Также подключаем цифровой выход «2» через резистор 10 кОм к источнику питания +5 В.

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

Встроенный светодиод на контакте «13» горит постоянно, пока не будет нажата кнопка. Те. Порт Arduino «2» всегда ВЫСОКИЙ. Когда мы нажимаем кнопку, напряжение на порте «2» становится НИЗКИМ, и светодиод гаснет.

Включение-выключение с помощью кнопки

Есть несколько вариантов включения и выключения:

  • светодиод загорается при нажатии кнопки, гаснет при отпускании;
  • светодиод загорается при нажатии, гаснет при повторном нажатии;
  • светодиод загорается при длительном нажатии;

Для этих диаграмм вы можете использовать один и тот же скетч, внося только изменения в код.

digitalRead()

Функция digitalRead () считывает значение с указанного вывода. В результате значения HIGH или LOW будут присвоены соответственно логическая 1 и 0.

Если контакт не подключен, значение функции может быть любым. Об этом важно помнить. Поскольку мы хотим связать кнопку с этим контактом и читать нажатия на нее. Но без дополнительных резисторов контакт останется отключенным, когда кнопка не нажата.

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

Понижающий резистор подключается параллельно кнопке и соединяет настроенный контакт с землей. Следовательно, когда кнопка не нажата, вход штыря устанавливается на НИЗКИЙ уровень напряжения. А когда вы нажимаете кнопку, уровень меняется на ВЫСОКИЙ.

Подключите кнопку и светодиод согласно схеме.

Принципиальная схема подключения кнопки и светодиода

Принципиальная схема подключения кнопки и светодиода

Подключите второй цифровой вывод на плате Arduino к синей шине на макете через резистор 20 кОм. Мы также подключим один из контактов кнопки к той же группе контактов на макетной плате.

Подключите второй контакт кнопки к красной шине макета.

Подключаем анод светодиода через резистор 220 Ом к девятому выводу ардуино, а катод к земле.

И мы соединяем синюю шину макета с контактом gnd на плате Arduino, а красную шину с контактом 5v.

Подключение модуля тактовых кнопок ROC к Ардуино

Специально для ваших проектов мы в RobotClass сделали модуль из двух тактильных кнопок. В модуле уже есть необходимые резисторы, а также два светодиода для индикации нажатия кнопок.

Модуль кнопки часов ROC

Давайте узнаем, как подключить этот модуль к Arduino Uno.

Схематическая диаграмма

Схема подключения кнопочного модуля часов ROC

Внешний вид макета

Схема подключения кнопочного модуля часов ROC

Как видите, какие бы кнопки мы ни использовали, схема подключения особо не меняется. График работы с ними также не изменится.

Аналоговые клавиатуры

Аналоговые клавиатуры — довольно глубокая тема, достойная отдельного урока (у меня его пока нет). Более подробный урок доступен на сайте Codius.

Скетч

В проекте мы используем готовый код, который находится во вкладке Примеры> Основы> Затухание

arduino-i-mosfet-sxema-подключения-1

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

  1. Плата Arduino Uno (купить на AliExpress).
  2. Два реле на 12 В (также можно использовать реле на 5 В).
  3. Два транзистора BC547 (купить на AliExpress).
  4. Две кнопки.
  5. IRF540N (купить на AliExpress).
  6. Сопротивление 10 кОм (купить на AliExpress).
  7. Источник питания 24 В.
  8. Потенциометр 10 кОм (купить на AliExpress).
  9. Три диода 1N4007 (купить на AliExpress).
  10. Соединительные кабели.

Дребезг контактов

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

Отскок контакта при нажатии и отпускании кнопки
Отскок контакта при нажатии и отпускании кнопки

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

Программа

В среде разработки arduino ide уже есть подходящая программа для нашего урока, будем ею пользоваться. В меню Файл, Примеры, Цифровой нажмите кнопку программы.

По умолчанию он использует 13 контактов и лампочку, подключенную к плате, для излучения светодиода. Но мы изменим постоянную шпильки на 9.

В цикле переменная buttonState считывает нажатие кнопки.

А в блоке if else мы проверяем состояние переменной buttonState и включаем светодиод, если напряжение на выводе 2 составляет 5 вольт.

Светодиод реагирует на нажатие кнопки

Светодиод реагирует на нажатие кнопки

Вопросы для проверки себя

  1. Когда оператор && возвращает истину»?
  2. Что такое отскок»?
  3. Как нам с ним бороться в программе?
  4. Как я могу избежать явного указания значения уровня напряжения при вызове digitalWrite?

Подключение и подтяжка

Из урока о цифровых выводах вы помните, что микроконтроллер может считывать напряжение со своей ножки. В результате пуговица может прикладывать уровень, на котором ее вторая ножка прикрепляется к штифту. В том же уроке мы обсуждали, что цифровой вывод, который нигде не подключен, получает помехи от воздуха, и значение, которое он считывает, будет почти случайным. То есть, подключившись к выводу 5V (сигнал высокого уровня) через кнопку, мы ничего не получим: при нажатии кнопки на выводе будет считываться четкий сигнал высокого уровня, а при отпускании — случайное значение будет отображаться для чтения. Чтобы решить эту проблему, есть что-то вроде выдергивания булавки. Подтягивание осуществляется на землю (pull down) или на источник питания (pull up) микроконтроллера с помощью резистора. Подтягивание выполняется в направлении, противоположном принятому сигналу, например, если необходимо захватить высокий сигнал, подтягивание выполняется на земле, если необходимо захватить наземный сигнал, выполняется подтягивание на блоке питания. Вот два варианта подключения кнопки, с подтягиванием к VCC и GND соответственно:

Как подбирается сопротивление резистора? Здесь все очень просто: при нажатии на кнопку через резистор будет течь ток, так как в любом случае цепь питание-земля замыкается. Чем больше ток, тем больше потери энергии и нагрев резистора, а это никому не нужно, поэтому сопротивление подтягивающего резистора обычно выбирают в пределах 5-50 кОм. Если поставить больше, подтяжка может не обеспечить стабильного уровня сигнала на выводе, а если поставить меньше, будут больше потерь энергии на нагрев резистора: при сопротивлении 1 кОм ток 5 Через него будет проходить В / 1000 Ом = 5 мА, для сравнения, плата Ардуино с МК в активном режиме потребляет 20-22 мА. Чаще всего для подтягивания используется резистор на 10 кОм.

Как вы помните из урока по цифровым выводам, в AVR MK есть встроенные резисторы для всех GPIO, эти резисторы подключены к источнику питания (к VCC), т.е они буквально дублируют первую схему этого урока и позволяют не делать этого используйте внешний резистор. Микроконтроллеры других архитектур имеют подтягивание к GND или могут вообще не иметь внутреннего подтягивания. При использовании подтягивания для источника питания мы получим инвертированный сигнал: функция digitalRead () вернет 1 при отпускании кнопки и 0 при нажатии (при использовании нормально открытой кнопки). Подключаем кнопку к выводу D3 (и GND):

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

Включение и выключение светодиода с помощью кнопки

Начнем с простейшего способа подключения сенсорной кнопки. Рассмотрим схему с Arduino в качестве источника питания, светодиода, ограничивающего резистора 220 Ом и кнопки, которая размыкает и замыкает цепь.

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

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

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

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

Если у вас выключатель другого типа, можно смело выделять контакты с противоположных углов (на некоторых кнопках создается специальная отметка в виде насечки, по которой можно определить, с какой стороны расположены парные контакты). Самый надежный способ определения правильных ног — прозвонить контакты тестером.

Сама схема с кнопкой, светодиодом и контроллером Arduino в особых пояснениях не нуждается. Кнопка разрывает цепь, светодиод не горит. При нажатии цепь замыкается, светодиод горит. Если перепутать контакты (включить через замкнутые парные контакты кнопки), то кнопка работать не будет, потому что цепь никогда не разомкнется. Просто поменяйте местами контакты.

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

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

Кнопка Arduino с подтягивающим резистором

В скетче мы будем следить за нажатием и отображением сообщения на дверном мониторе. Вскоре мы приведем более интересный пример и подробное объяснение самой схемы.

Обратите внимание на резистор 10 кОм, который мы добавили в эту схему. О его назначении мы поговорим подробнее ниже, учтите, что такой резистор необходим для правильной работы схемы.

Эскиз кнопки Arduino с подтягивающим резистором:

Принцип работы

Идея довольно проста: питание на Arduino и остальную периферию подается через переключатель, в роли которого будет использоваться полевой транзистор (MOSFET). В нормальном состоянии транзистор остается закрытым, через него не течет ток, и устройство выключено. Чтобы включить устройство, нужно открыть транзистор, нажав на кнопку. Чтобы в дальнейшем он не закрывался при отпускании кнопки, эстафету принимает уже включенная Ардуино. Устанавливает на один из цифровых выводов сигнал уровня, необходимого для удержания транзистора в открытом состоянии. Когда этот сигнал будет удален, транзистор закроется, и устройство выключится.

Подключение к Ардуино Уно

Теперь, когда функция сенсорной кнопки очень понятна, давайте соберем схему с кнопкой и светодиодом и подключим их к контроллеру. Зададимся простой задачей: заставить светодиод мигать три раза, когда вы нажимаете кнопку Arduino Uno один раз.

Схематическая диаграмма

Схема подключения кнопки к Arduino

Внешний вид макета

Схема подключения кнопки к Arduino

На этой схеме мы видим уже знакомую схему светодиодного освещения. Мы также видим кнопку, подключенную к выводу №3 Arduino. Здесь вполне резонно может возникнуть вопрос: зачем мы еще и кнопку подключили к земле, через резистор 10кОм? Чтобы решить эту проблему, представим, что вы подключили кнопку по «наивной» схеме без дополнительных резисторов.

button_sh_3

Здесь между контактом № 3 и масса показан небольшой конденсатор, способный накапливать заряд. Многие микроконтроллеры имеют эту функцию.

Теперь представьте, что закрываете кнопку. Ток начинает идти от + 5В, прямо на контакт n. 3, одновременно заряжая емкость. Arduino успешно регистрирует нажатие кнопки. Но, убрав палец с кнопки часов, микроконтроллер, вопреки нашим ожиданиям, продолжает считать, что кнопка нажата! Но ведь заряженный конденсатор постепенно передает накопленный заряд на ногу № 3. Это будет продолжаться до тех пор, пока емкость не опустится ниже уровня логического диска.

Чтобы этого не произошло, необходим так называемый подтягивающий резистор (или подтягивающий резистор на землю). Когда кнопка замкнута, ток будет проходить по пути наименьшего сопротивления, то есть к контакту n. 3. Но как только кнопка отпускается, паразитная емкость мгновенно разряжается на землю через резистор.

Как переключать режимы кнопкой

Переключение между несколькими режимами осуществляется путем установки другого переменного режима. Его значение изменится при следующем нажатии на сенсор управления.
В некоторых ситуациях придется менять саму проводку.

Digital: Debounce (Дребезг)

Кнопки обладают эффектом «отскока». Во время замыкания и размыкания между пластинами кнопок возникают микроискры, вызывая до десятка переключений за несколько миллисекунд. Это явление называется отскоком. Это необходимо учитывать, если необходимо регистрировать «клики». Следовательно, первичные показания не могут быть достоверными. По этой причине они часто делают небольшую паузу в зарисовке и только потом читают показания. В нормальном состоянии, когда кнопка не нажата или кнопка удерживается, эффект отскока не наблюдается. Иногда в обучающих программах для этих целей используется функция delay (), но на практике вам следует использовать функцию millis (), как в File | Примеры | 02.Digital | Подпрыгивать. Схема подключения остается без изменений.

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

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

pinMode (PIN_BUTTON, INPUT_PULLUP);

Альтернативный вариант — выбрать режим вывода как ВЫХОД и установить для этого порта высокий уровень сигнала. Встроенный подтягивающий резистор подключается автоматически.

И это все. Вы можете собрать такую ​​сложную схему и работать с кнопкой в ​​эскизе.

Кнопка Arduino без резистора

Мигание светодиода после нажатия на кнопку

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

Полная схема проекта представлена ​​на рисунке:

Включение светодиода кнопкой в ​​ардуино

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

Нажмите и удерживайте: светодиод мигает. Отпускаю — выключается. Именно то, что они хотели. Мы хлопаем в ладоши от радости и приступаем к анализу того, что мы сделали.

Посмотрим на эскиз. В нем мы видим довольно простую логику.

  1. Определяет, была ли нажата кнопка.
  2. Если кнопка не нажата, мы просто выходим из метода цикла, ничего не добавляя и не изменяя.
  3. При нажатии на кнопку мигает фрагмент стандартного скетча:
    1. Включите светодиод, подав напряжение на нужный порт
    2. Делаем необходимый перерыв с включенным светодиодом
    3. Выключите светодиод
    4. Делаем необходимый перерыв с выключенным светодиодом

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

Видео

Алгоритмы

Отработка нажатия

В большинстве реальных приложений работа с текущим состоянием кнопки очень неудобна, например, когда действие необходимо выполнить один раз при нажатии кнопки, например, при нажатии. Немного усложним конструкцию, добавив флаг, который будет запоминать состояние кнопки. Этот дизайн позволяет отслеживать нажатие и отпускание кнопки и реагировать на них один раз:

Дребезг контактов

Кнопка не идеальна и контакт не замыкается сразу, какое-то время «гремит». Запустив этот алгоритм, система запрашивает кнопку и условия примерно за 6 мкс, то есть кнопка запрашивается 166666 раз в секунду! Этого достаточно, чтобы сгенерировать несколько тысяч ложных срабатываний.
Устранить дребезг контактов можно как аппаратно, так и программно: аппаратно проблема решается за счет использования RC-цепи, то есть резистора (~ 1-10k) и конденсатора (~ 100nF). Похоже на то:

Программно вы можете ввести простейший таймер для нажатия, основанный на миллис (), время дребезга будет принято за 100 миллисекунд. Вот как будет выглядеть код:

Мы, конечно, рекомендуем использовать аппаратный метод, так как он не нагружает ядро ​​лишними вычислениями. В 99,99% проектов программной защиты от отказов будет достаточно, поэтому смело используйте конструкцию millis().

“Импульсное” удержание

В устройствах с кнопочным управлением очень часто необходимо иметь возможность изменять значение либо одним щелчком по кнопке, либо «автоматически» с тем же шагом, удерживая его. Этот вариант реализован очень просто путем добавления еще одного условия к нашему предыдущему алгоритму, а именно: если кнопка была нажата, но еще не отпущена, и прошло больше времени, чем указано, условие вернет истину. В следующем примере частота «щелчков» при удерживании установлена ​​на 500 миллисекунд (2 раза в секунду):

Непосредственно использовать этот код будет неудобно, чтобы можно было «обернуть» его в класс (читайте урок по классам и урок по написанию библиотек).

Простейший класс кнопки

Вот как предыдущий пример можно превратить в класс (мы сделали это в этом уроке), поместить его в отдельный файл (button.h) и использовать:

Другие возможности кнопки

Кнопка выглядит как простое устройство, дающее 0 и 1, но, соединив воображение и время, вы можете найти гораздо больше применений для обычной кнопки. В моей библиотеке GyverButton реализовано много интересных возможностей для работы с кнопкой, вот список:

  • Работа с нормально закрытыми и нормально открытыми кнопками
  • Работа с подключением PULL_UP и PULL_DOWN Опрос кнопки с программным обеспечением противодействия (настраиваемое время)
  • Тренируйтесь нажимать, удерживать, отпускать, нажимать кнопку (+ настройка тайм-аута)
  • Практикуйте одиночные, двойные и тройные жимы (выполняются отдельно)
  • Обработка любого количества мер (функция возвращает количество мер)
  • Функция изменения значения переменной с заданным шагом и заданным временным интервалом
  • Возможность работы с «виртуальными» кнопками (все функции библиотеки используются для матричных и резистивных клавиатур)

Подробное описание библиотеки можно прочитать в заголовочном файле на странице библиотеки, там тоже много примеров.

Дребезг кнопки ардуино

В процессе работы с кнопками мы можем столкнуться с очень неприятным явлением, которое называется подпрыгиванием кнопок. Как следует из названия, это явление вызвано дребезгом контактов внутри кнопочного переключателя. Металлические пластины соприкасаются не мгновенно (хотя и очень быстро для нашего глаза), поэтому на короткое время в зоне контакта появляются скачки и провалы напряжения. Если мы не ожидаем появления таких «мусорных» сигналов, то мы будем реагировать на них каждый раз и сможем забрать свой проект домой.

Для устранения дребезга используются программные и аппаратные решения. Вкратце упомянем только основные методы подавления отскока:

  • Добавьте в скетч паузу в 10-50 миллисекунд между получением значений от вывода Arduino.
  • Если мы используем прерывания, то программное обеспечение metd не может быть использовано, и мы формируем аппаратную защиту. Самый простой из них — RC-фильтр с конденсатором и резистором.
  • Для более точного подавления дребезга используется аппаратный фильтр, использующий триггер Шмидта. Такой вариант позволит получить на входе ардуино сигнал практически идеальной формы.

Дополнительные сведения о том, как обрабатывать отказы, см. В этой статье о том, как обрабатывать отказы кнопок.

02.Digital: Button

Использование кнопки также обсуждается в примере File | Примеры | 02.Digital | Кнопка. Кнопка подключается к контакту 2, а светодиод подключается к контакту 13. Кнопка также должна быть запитана и заземлена через резистор 10 кОм. Сам принцип работы остался неизменным. Только в этот раз мы не будем выводить на экран информацию о состоянии кнопок, а включим светодиод. Этот вариант более наглядный. При нажатии и отпускании кнопки встроенный светодиод должен включаться или выключаться.

Предположим, мы хотим изменить поведение: если кнопка не нажата, светодиод горит, а при нажатии светодиод не горит. Просто измените строку кода.

А теперь загадка! Вы загрузили первый черновик на доску, и внезапно ваш компьютер сломался. Вы не можете редактировать эскиз, чтобы использовать второй вариант. Как выйти из ситуации?

Полярность цепи должна быть обратной! Провод от резистора, который заземлен, нужно подключить к 5В, а провод, идущий от 5В к кнопке, закинуть на массу. После включения ток будет течь от источника питания к контакту 2 без каких-либо помех, и будет получено ВЫСОКОЕ значение. Когда кнопка нажата, будет создана другая цепь, и контакт 2 останется без питания.

Переключение режимов с помощью кнопки

Чтобы определить, была ли нажата кнопка, достаточно исправить факт нажатия и сохранить знак в специальной переменной.

Определяем, нажимать ли с помощью функции digitalRead (). В результате получаем HIGH (1, TRUE) или LOW (0, FALSE) в зависимости от того, как была подключена кнопка. Если мы подключим кнопку с помощью внутреннего подтягивающего резистора, при нажатии кнопки будет получен уровень 0 (ЛОЖЬ) на входе).

Дело в том, что digitalRead () может возвращать HIGH, но это не означает, что была нажата кнопка. В случае использования схемы с подтягивающим резистором ВЫСОКИЙ будет означать, что кнопка, наоборот, не нажата. В первом варианте (digitalRead (PIN_BUTTON) == LOW) мы сразу сравнили ввод с нужным нам значением и определили, что кнопка была нажата, хотя на входе сейчас низкий уровень сигнала. И он сохранил состояние кнопки в переменной. Постарайтесь явно указать все выполняемые логические операции, чтобы сделать код более прозрачным и избежать ненужных глупых ошибок.

Как переключать режимы работы после нажатия кнопки?

Часто возникает ситуация при использовании кнопок, необходимо учитывать не только нажатие, но и отпускание кнопки. Например, нажав и отпустив кнопку, мы можем включить свет или изменить режим работы схемы. Другими словами, нам нужно как-то исправить в коде тот факт, что мы нажимаем кнопку и используем информацию в будущем, даже если кнопка еще не была нажата. Посмотрим, как ты сможешь это сделать.

Логика программы очень проста:

  • Вспомните нажатие служебной переменной.
  • Ждем, пока исчезнут явления отскока.
  • Ждем отпускания кнопки.
  • Запоминаем отпускание и выставляем в отдельной переменной признак того, что кнопка была полностью нажата.
  • Удаляем служебную переменную.

Некорректное подключение кнопки

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

Неправильное подключение кнопки к Arduino
Неправильное подключение кнопки к Arduino

Чтобы избежать наводки, цифровой вывод обычно подключается через достаточно большой резистор (10 кОм) к земле или источнику питания. В первом случае это называется «цепью подтягивающего резистора», во втором — «цепью подтягивающего резистора». Давайте разберемся с каждым из них.

Оцените статью
Блог про Arduino
Adblock
detector