0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Как подключить светодиод к кнопке

Кнопка

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

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

Подключим кнопку без использования контроллера, пропустив ток из 5V. При нажатии кнопки цепь замкнётся и светодиод будет светиться. Ничего неожиданного.

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

Код прекрасно работает при нажатии кнопки. А когда мы отпускаем кнопку и создаём разрыв в цепи, то возникает проблема. Вывод 12 становится свободным и висит в неопределённом состоянии в режиме INPUT (вспоминаем урок про цифровые выводы). В результате мы получаем случайные значения и светодиод то включается, то выключается от наводок.

Чтобы избежать этой проблемы, можно добавить резистор от 10 до 100 кОм и прижать кнопку к земле. В этом случае цепь будет замкнута даже при отпущенной кнопке. В этом случае резистор называют стягивающим (pull down). Это рабочая схема, которую можно использовать в учебной программе.

Несмотря на рабочую схему с стягивающим резистором, мы получаем проблему при работе со сложным проектом. Дело в том, что возможна ситуация, когда многие устройства в схеме используют разные значения питания. И тогда придётся к каждой кнопке устройства подавать свой отдельный стягивающий резистор. На практике принято подключаться не к питанию, а к земле, которая всегда одинакова и равно 0. В этом случае сам резистор следует подключить к питанию — подтянуть. Резистор в этом случае является подтягивающим (pull up). Правда, при этом возникает другая проблема — поведение светодиода изменилось противоположным образом — при нажатии светодиод выключается, а при отпускании — включается. Решается проблема просто — меняем одну строчку кода.

Мы просто меняем значение переменной на противоположное. Это стандартный подход при работе с кнопкой. Теперь вам будет легче разобраться с примерами из Arduino IDE.

Стоит отметить, что у платы Arduino у выводов уже есть встроенные подтягивающие резисторы (кроме вывода 13) и мы можем убрать внешний резистор. Но тогда надо также явно указать использование данного резистора через код с параметром INPUT_PULLUP.

01.Basics: DigitalReadSerial (Чтение цифрового вывода)

Изучим пример DigitalReadSerial из File | Examples | 01.Basics.

Мы изучили, как правильно подключать кнопку и можем изучать встроенные примере. Будем считывать сигнал, идущий с цифрового вывода при нажатии кнопки.

Приблизительно собранная схема может выглядеть следующим образом:

Вкратце опишу на словах данную схему. Вставляем в центре макетной платы кнопку таким образом, чтобы между парными ножками проходил жёлоб макетной платы. Далее соединяем перемычками питание 5V и землю GND на Arduino с рельсами на макетной плате. Потом соединяем перемычкой цифровой вывод под номером 2 на Arduino с одной ножкой кнопки на макетной плате. Эту же ножку кнопки, но с другой стороны соединяем с резистором, который выполняет роль стягивающего резистора. После чего сам резистор соединяем с землёй. Третью ножку кнопки соединяем к положительной рельсе на макетной плате. Осталось только соединить между собой боковые рельсы на макетной плате, и мы готовы изучать новый пример.

Кнопка выполняет очень важную функцию — она замыкает цепь при нажатии. Когда кнопка не нажата, то ток не проходит между ножками кнопки, и не можем поймать сигнал с цифрового вывода под номером 2. Поэтому состояние вывода определяется системой как LOW или 0. При нажатии на кнопку его две ножки соединяются, позволяя току пройти от питания к цифровому выводу 2, а система считывает проходящий сигнал как HIGH или 1.

Разберём код по кусочкам

В функции setup() устанавливаем связь с портом для считывания данных на скорости 9600 бит в секунду с Arduino на ваш компьютер: Serial.begin(9600).

Вторая строчка нам уже знакома, но здесь теперь используется параметр INPUT — мы устанавливаем второй цифровой вывод на режим чтения данных, поступающих с кнопки: pinMode(pushButton, INPUT);

В цикле считываем поступающую информацию. Для начала нам понадобится новая переменная buttonState, которая будет содержать значения 0 или 1, поступающие от функции digitalRead().

Чтобы мы могли видеть поступающую информацию, нужно вывести получаемые результаты в окно Serial Monitor при помощи команды println().

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

Если вы сейчас запустите программу и откроете также окно Serial Monitor (меню Tools | Serial Monitor), то на экране увидите бесконечные нули. Программа постоянно опрашивает состояние нашей конструкции и выводит результат — отсутствие тока. Если нажать на кнопку и удерживать её, то увидите, что цифры сменяются с 0 на 1. Значит в нашей цепи появился ток и информация изменилась.

02.Digital: Button

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

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

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

Нужно поменять полярность цепи! Провод от резистора, который на землю, нужно воткнуть в 5V, а провод, который шёл из 5V к кнопке, перекинуть на землю. При включении ток пойдёт из питания на вывод 2 без всяких помех и будет получено значение HIGH. При нажатии кнопки получится другая цепь, и вывод 2 останется без питания.

02.Digital: StateChangeDetection

В примере File | Examples | 02.Digital | StateChangeDetection идёт подсчёт щелчков кнопки и состояние кнопки (включён или выключен). Схема осталась прежней. Кнопка соединяется с выводом 2, а светодиод с выводом 13 (можно использовать встроенный). К кнопке также следует подвести питание и стягивающий резистор к земле на 10K.

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

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

02.Digital: DigitalInputPullup (Встроенный подтягивающий резистор)

У цифровых выводов уже есть резисторы на 20 кОм, которые можно использовать в качестве подтягивающих при работе с кнопками. Рассмотрим пример File | Examples | 02.Digital | DigitalInputPullup.

Схема подключения — соединим первый вывод кнопки с выводом 2 на плате, а второй вывод кнопки с выводом GND. Во время работы скетча будем считывать показания второго вывода.

Если запустить скетч, то увидим, что на монитор выводятся числа 1 (HIGH). При нажатии на кнопку значения поменяются на 0 (LOW).

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

Сегодня поговорим о подключении кнопок к Ардуино. Подключения кнопок бывают 3-х видов.
План.
• Быстрое ознакомление с подключением кнопок.
• Помигаем светодиодами управляя одной кнопкой.
• Напишем скетч плавного включения светодиода от нажатия кнопки.
• Подключим библиотеку Bounce2 и научимся с ней работать.
• Напишем скетч, который будет управлять разными устройствами всего одной кнопкой.
• Изучим обработчик кнопки с одним, двумя, тремя и длительностью нажатия кнопки.

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

Так что же такое кнопка?
Кнопка – простейшее электромеханическое устройство, замыкающее и размыкающее электрическую цепь.

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


и не фиксированным положением. Они называются — тактовые кнопки.


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

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

Существует много различных способов подключить кнопки.

Если кнопка без дополнительного резистора, то в тот момент когда она не нажата, получается, что один контакт висит в воздухе и на него действуют разные внешние факторы. Например электрические наводки. Даже если просто пошатать провод, то это может изменить состояние кнопки.
Поэтому используют так называемые подтяжки.
Верхние (pull-up) Один вывод кнопки подключается к минусу, а другой через резистор 10кОм подключается к плюсу питания.
Нижние (pull-down) Один вывод кнопки подключается к плюсу питания. а другой через резистор 10кОм подключается к земле.

Есть ещё внутренняя подтяжка — Internal PULL-UP подтягивающий резистор 20 кОм.


Вот его мы и будем использовать, упростив тем самым схему и уменьшив количество используемых деталей.
Правда тогда при нажатой кнопке у нас будет сигнал LOW или 0, а при отжатой будет HIGH или 1. Как бы всё наоборот.

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

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

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

Давайте рассмотрим самый простой пример.
Зажжём светодиод при нажатой кнопке, и погасим его при отжатой.

Сначала определяем константы для хранения номеров выводов Ардуино к которым мы подключаем кнопку и светодиод.
Кнопка у нас будет подключена к выводу 2, а светодиод к выводу 3.

Указываем, что вывод к которому подключен светодиод должен работать на выход, а кнопка должна работать в режиме внутреннего Internal PULL-UP.
Считываем значение кнопки функцией digitalRead().
Так как кнопка у нас подключена к земле, при нажатии мы получим ноль , а нам нужна единица. Поэтому инвертируем значение, то есть переворачиваем.
Если было 0 то будет 1, и наоборот.
И делаем небольшую задержку для устранения дребезга.

Второй пример. Будем плавно включать светодиод нажатием на кнопку.

У всех этих примеров есть 1 недостаток.
Все они используют функцию delay(). Она просто тормозит Ардуино и не даёт выполнять программу дальше пока не закончится время указанное в delay()
Чтобы избавиться от неё надо воспользоваться функцией millis()
Это функция, возвращающая количество миллисекунд с момента начала выполнения программы на плате Arduino.

Напишем код, который будет сам плавно зажигать светодиод.
Для этого нам понадобится выход, на микроконтроллере Ардуино, который поддерживаем ШИМ(PWM).
Про это у меня тоже были уроки.
Создаём глобальную переменную i.
Всё остальное оставляем из прошлого примера без изменения.
Считываем значение с кнопки и если она нажата, то начинаем увеличивать переменную i на единицу.
И так пока она не будет равна 255, а затем сбрасываем значение в 0.
Это максимальное значение.
0 – это полное выключение светодиода, а 255 самое яркое свечение.
Этот пример можно использовать для вращения моторчика или для ночника.

Теперь добавим пару строчек которые будут сбрасывать переменную i в ноль при отпускании кнопки, если снова нажать на кнопку цикл начнётся заново.

БОЛЕЕ ПОДРОБНО СМОТРИТЕ В ВИДЕО.

Включение светодиода через кнопку в Arduino UNO

Как включить светодиод через кнопку в Arduino UNO

Давайте продолжим разработку простых схем на Arduino UNO и cегодня мы задействуем такой элемент управления схем, как кнопка, смонтированная на монтажной плате.

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

Давайте установим резистор на монтажную плату, будем использовать один разъём минусовой, он отмечен синим цветом на монтажной плате, не доходя до ножки один оставим свободный разъём, также нам понадобятся провода для земли, для минуса, проводник для подачи 5 вольт, и для управления светодиодом.

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

Объявим константу целочисленное значение int и дадим имя константе keyPin равно 12, также объявим еще одну константу, тип int ledPin равно 13.

На 12 контакт мы будем подавать напряжение 5V, 13 контакт у нас будет питать светодиод.

В подпрограмме setup с помощью функции pinMode мы объявим для keyPin 12 разъем, определим его как Input , как входящие данные, он у нас будет на прием.

Продублирую эту строчку и заменим keyPin на ledPin , и это у нас будет исходящий, OUTPUT, разъем.

В цикле loop напишем следующий код, по условию, если DigitalRead() , читаем цифровой разъем на двенадцатом пине подано напряжение, это константа HIDE , то соответственно мы выполним условие, передадим цифровое значение через функцию digitalWrite на ledPin на двенадцатый разъем напряжение.

Если же нет на двенадцатом пине напряжения 5V, то соответственно на светодиод подаётся LOW , ноль или отсутствие напряжения.

Вот какой текст кода должен получиться.

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

Итак мы используем чёрный проводник, который мы подключим Ground, к земле, с вот этой стороны, можно использовать возле 13 разъёма Ground, но мы его ещё задействуем.

Подключим с этой стороны ближе к микросхеме и подключим его к минусу на разъеме, соответственно минус у нас сейчас подключён к резистору.

Жёлтый проводник мы подключаем к 5 вольтам рядом с Ground на этой стороне, силовой блок, силовой разъём, где написано Power.

В 12 разъемы подключаем оранжевый проводник и подключаем его в эту точку между сопротивлением и кнопкой, после того как мы нажмем на кнопку, соответственно, если у нас подаётся напряжение, замыкается цепь, 5V приходит на оранжевый проводник на 12 разъем, то загорается светодиод на плате.

Давайте подключим зелёный светодиод, обратите внимание, как выполнены контакты, длинный контакт это плюс, короткий контакт светодиода — это минус.

Длинный разъём подключаем в 13 разъем и короткий минусовой у нас идёт в GROUND, при нажимании на кнопку нас загорается светодиод.

Аналогично со светодиодом на плате, давайте установим светодиод, вынесем его на монтажную плату, задействуем ещё несколько проводников.

Давайте вот этот тёмно-зелёный мы подключим к короткой ножке и к минусу, а проводник красный мы подключим к 13 разъему и соответственно на монтажной плате к плюсовому разъёму светодиода.

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

Смотрите видео, как включить светодиод через кнопку в Arduino UNO

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

2 способа добавить кнопку в ваш проект Raspberry Pi

Научиться использовать контакты GPIO на вашем Raspberry Pi открывает целый мир возможностей. Основные принципы, усвоенные в проектах для начинающих, прокладывают путь к полезным знаниям в области электроники и программирования DIY.

Этот туториал покажет вам два способа добавить кнопку в ваш проект Raspberry Pi. Кнопка будет использоваться для управления светодиодом. Письменные инструкции доступны под видео.

Тебе понадобится

Для начала убедитесь, что у вас есть следующие компоненты:

  • 1 х Raspberry Pi (подойдет любой, в этом уроке используется модель 3B)
  • 1 х кнопка
  • 1 х светодиодный
  • 1 х 220 Ом резистор (более высокие значения в порядке, ваш светодиод будет просто тусклее)
  • 1 х макет
  • Подключить провода

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

Вам также понадобится SD-карта с установленной операционной системой Raspbian. Самый быстрый способ сделать это с помощью образа NOOBS (Новое программное обеспечение из коробки). Инструкции о том, как это сделать, доступны в этом видео:

Настройка схемы

Вы будете использовать контакты GPIO Pi для создания цепи, и если вы не знакомы с ними, поможет наше руководство по контактам Raspberry Pi GPIO. Схема здесь почти такая же, как в нашем предыдущем проекте Raspberry Pi LED, с добавлением кнопки, которую вы будете использовать сегодня.

Настройте вашу схему в соответствии с этой схемой:

  • 5v а также GND контакты соединяются с силовыми шинами макета.
  • Контакт 12 (GPIO 18) подключается к положительной ножке светодиода.
  • Одна нога резистор прикрепляется к отрицательной ножке светодиода, а другая ножка прикрепляется к шине заземления макета.
  • Контакт 16 (GPIO 23) прикрепляется к одной стороне кнопки, другая сторона прикрепляется к шине заземления макета.

После того, как это настроено, вот как это должно выглядеть:

Проверьте правильность схемы, а затем включите Raspberry Pi.

Метод 1: Библиотека RPi.GPIO

После загрузки Pi перейдите в меню и выберите Программирование> Thonny Python IDE. Откроется новый скрипт Python. Если вы абсолютно новичок в Python, это отличный язык для начинающих, и есть много отличных мест, где можно больше узнать о Python после того, как вы закончите с этим руководством!

Начните с импорта библиотеки RPi.GPIO и установки режима платы.

Теперь объявите переменные для номеров светодиодов и выводов кнопок.

Обратите внимание, что, поскольку у нас установлен режим доски BOARD мы используем номера контактов, а не номера GPIO. Если вас это смущает, распиновка диаграммы Raspberry Pi поможет вам разобраться в этом.

Настройка кнопки

Пришло время настроить выводы GPIO. Установите вывод светодиода на вывод, а вывод кнопки — на вход с подтягивающим резистором

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

Прежде чем мы продолжим, давайте посмотрим на подтягивающие и понижающие резисторы.

Интервал: резисторы Pull Up / Pull Down

Когда вы настраиваете вывод GPIO для ввода, он считывает этот вывод, чтобы определить его состояние. В этой схеме вам нужно прочитать, есть ли контакт ВЫСОКО или же НИЗКИЙ активировать светодиод при нажатии кнопки. Это было бы просто, если бы это были единственные состояния, которые может иметь вывод, но, к сожалению, существует третье состояние: FLOATING.

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

Изображение выше представляет собой упрощенную схему кнопки и Raspberry Pi. Вывод GPIO подключается к земле через кнопку. Внутренний подтягивающий резистор присоединяет вывод GPIO к внутреннему источнику питания Pi. Этот ток течет, и штифт безопасно поднимается до ВЫСОКОГО.

Когда вы нажимаете кнопку, вывод GPIO подключается непосредственно к выводу заземления, а кнопка показывает низкий уровень.

Понижающие резисторы предназначены для подключения переключателя к выводу питания. На этот раз внутренний резистор прикрепляет вывод GPIO к земле, удерживая его в НИЗКОМ, пока вы не нажмете кнопку.

Теория резисторов Pull-up и Pull-down на первый взгляд сбивает с толку, но это важные знания при работе с микроконтроллерами. Пока, если вы не совсем понимаете это, не волнуйтесь!

Давайте продолжим там, где мы остановились.

Цикл программы

Далее настройте цикл программы:

пока верно Цикл постоянно запускает код внутри него, пока мы не закончим программу. Каждый раз, когда он зацикливается, он обновляет buttonState читая входные данные из buttonPin. Пока кнопка не нажата, она остается ВЫСОКО.

Как только кнопка нажата, buttonState становится НИЗКИЙ. Это вызывает если заявление, поскольку Ложь такой же как НИЗКИЙ, и светодиод включается. еще оператор выключает светодиод всякий раз, когда buttonPin не False.

Сохраните и запустите ваш скрипт

Сохраните ваш скрипт, нажав Файл> Сохранить как и выбрав имя файла. Вы можете запустить эскиз, нажав на зеленый Играть кнопка на панели инструментов Тонны.

Теперь нажмите кнопку, и ваш светодиод должен загореться! Нажмите красный Стоп кнопка в любое время, чтобы остановить программу

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

Способ 2: нулевая библиотека GPIO

Библиотека RPi.GPIO фантастическая, но в блоке есть новый ребенок. Нулевая библиотека GPIO была создана менеджером сообщества Raspberry Pi Беном Натталлом с целью сделать код проще и удобнее для чтения и записи.

Чтобы проверить новую библиотеку, откройте новый файл Thonny и импортируйте библиотеку.

Вы заметите, что не импортировали всю библиотеку. Поскольку вы используете только светодиод и кнопку, вам требуются только те модули в сценарии. Мы также импортируем Пауза из библиотеки сигналов, которая является библиотекой Python для управления событиями.

Настроить контакты гораздо проще с GPIO Zero:

Поскольку библиотека GPIO Zero имеет модули для светодиода и кнопки, вам не нужно настраивать входы и выходы, как раньше. Вы заметите, что, хотя контакты не изменились, цифры здесь отличаются от приведенных выше. Это связано с тем, что GPIO Zero использует только номера контактов GPIO (также известные как номера Broadcom или BCM).

Остальная часть сценария состоит всего из трех строк:

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

Два способа добавить кнопку в Raspberry Pi

Из двух способов настройки кнопки, метод GPIO Zero кажется самым простым. О библиотеке RPi.GPIO все еще стоит узнать, так как ее используют большинство начинающих проектов Raspberry Pi. Как бы ни был прост этот проект, знания могут быть использованы для разных целей.

Использование выводов GPIO — отличный способ выучить и изобрести свои собственные устройства, но это далеко не все, что вы можете сделать с Pi. Наш неофициальный гид по Raspberry Pi

наполнен творческими идеями и учебными пособиями, которые вы можете попробовать сами! Для другого учебника, подобного этому, проверьте, как сделать кнопку подключенной к Wi-Fi

Raspberry Pi:Примеры/Включение и выключение светодиода с помощью кнопки

Черновик

Содержание

  • 1 Включение и выключение светодиода с помощью кнопки
    • 1.1 Необходимое оборудование
    • 1.2 Схема
    • 1.3 Код
  • 2 См.также
  • 3 Внешние ссылки

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

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

При нажатии кнопки 12-ый вывод GPIO(18-ый по нумерации BCM) подтягивается к земле(GND). При отпущенной же кнопке 12-ый вывод GPIO(18-ый по нумерации BCM) подтягивается к шине 3,3В, благодаря третьему параметру функции RPi.GPIO.setup():

Каждый вывод GPIO Raspberry Pi имеет подтягивающие к шине питания и земле резисторы, которыми можно управлять программно. При установке вывода как входа, к нему можно подключить оба, один или ни одного подтягивающего резистора. Если при этом опустить третий параметр функции RPi.GPIO.setup(), внутренние подтягивающие резисторы не будут использованы, что приведет к «плавающему» потенциалу на входе(на входе будет периодически появляться сигнал высокого или низкого уровня).

Если третьему параметру функции присвоить значение RPi.GPIO.PUD_UP, то внутренний подтягивающий резистор будет соединен с шиной питания, а при значении RPi.GPIO.PUD_DOWN с шиной заземления.

В программе текущее состояние светодиода хранится в переменной led_state(значение True — светодиод включен, False -выключен). Переменная old_input_state хранит предыдущее состояние кнопки, а new_input_state текущее состояние кнопки.

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

Дальше в бесконечном цикле мы считываем значение(текущее состояние кнопки) с 12 вывода GPIO(18ый по нумерации BCM):

Если мы нажали кнопку(12 вывод GPIO(18ый по нумерации BCM) подтянулся к земле и мы считываем значение False) и до этого кнопка была отжата(внутренний резистор, подключенный к 12 выводу GPIO(18ый по нумерации BCM) подтянут к шине питания и мы считываем значение True):

Мы инвертируем состояние светодиода с выключенного на включенный:

Сохраняем текущее состояние кнопки как предыдущее:

Подаем высокий уровень сигнала на 16 вывод GPIO(23ый по нумерации BCM), светодиод горит:

Выполнение программы продолжается с состоянием: светодиод включен, кнопка была нажата(12 вывод GPIO(18ый по нумерации BCM) подтянулся к земле, мы считали значение False):

Считываем значение(текущее состояние кнопки) с 12 вывода GPIO(18ый по нумерации BCM):

Так как мы не нажимали на кнопку(12 вывод GPIO(18ый по нумерации BCM) подтянут к шине питания через внутренний подтягивающий резистор и мы считываем значение True) и прошлый раз кнопка была нажата(12 вывод GPIO(18ый по нумерации BCM) подтянулся к земле, мы считали значение False), условие не будет выполнено:

И данный код выполняться не будет:

Сохраняем текущее состояние кнопки как предыдущее:

Продолжаем подавать высокий уровень сигнала на 16 вывод GPIO(23ый по нумерации BCM), светодиод горит:

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

Считываем значение(текущее состояние кнопки) с 12 вывода GPIO(18ый по нумерации BCM):

Если мы нажали кнопку(12 вывод GPIO(18ый по нумерации BCM) подтянулся к земле и мы считываем значение False) и до этого кнопка была отжата(внутренний резистор, подключенный к 12 выводу GPIO(18ый по нумерации BCM) подтянут к шине питания и мы считываем значение True):

Мы инвертируем состояние светодиода с включенного на выключенный:

Сохраняем текущее состояние кнопки как предыдущее:

Подаем низкий уровень сигнала на 16 вывод GPIO(23ый по нумерации BCM), светодиод не горит:

Выполнение программы продолжается с состоянием: светодиод выключен, кнопка была нажата(12 вывод GPIO(18ый по нумерации BCM) подтянулся к земле, мы считали значение False)::

И так в бесконечном цикле мы можем включать и выключать светодиод.

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

Необходимое оборудование

  • плата Raspberry Pi — 1шт.;
  • макетная плата — 1шт.;
  • резистора на 470 Ом — 1шт.;
  • светодиод — 1шт.;
  • кнопка — 1шт.;
  • пара перемычек;

Схема

Будьте осторожны при обращении с портами GPIO вашего Raspberry Pi. Помните входы и выходы GPIO расссчитаны на напряжение +3,3В

Несмотря на то,что у кнопки 4 вывода, как 2 левых так и 2 правых вывода соединены между собой.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

И все. Можно собрать вот такую сложную схему и работать с кнопкой в скетче.

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

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

Полная схема проекта изображена на рисунке:

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

Нажимаем и держим – светодиод мигает. Отпускаем – он гаснет. Именно то , что хотели. Хлопаем от радости в ладоши и приступаем к анализу того, что сделали.

Давайте посмотрим на скетч. В нем мы видим довольно простую логику.

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

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

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

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

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

  • Добавляем в скетче паузу 10-50 миллисекунд между полкучением значений с пина ардуино.
  • Если мы используем прерывания, то программный метд использоваться не может и мы формируем аппаратную защиту. Простейшая из них – RC фильтр с конденсатором и сопротивлением.
  • Для более точного подавления дребезга используется аппаратный фильтр с использованием триггера шмидта. Этот вариант позволит получить на входе в ардуино сигнал практически идеальной формы.

Более подробную информацию о способах борьбы с дребезгом вы можете найти в этой статье об устранении дребезга кнопок.

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

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

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

Для хранения информации о нажатии на кнопку можно использовать переменную типа boolean:

boolean keyPressed = digitalRead(PIN_BUTTON)==LOW;

Почему мы используем такую конструкцию, а не сделали так:

boolean keyPressed = digitalRead(PIN_BUTTON);

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

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

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

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

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

Как определить нажатие нескольких кнопок?

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

Ардуино для начинающих. Урок 5. Кнопки, ШИМ, функции

В этом уроке мы узнаем: как подключить кнопку к ардуино, как подавить дребезг контактов, как в прошивке обработать нажатие на кнопку, как послать ШИМ сигнал, как создать свою функцию и как управлять светодиодом.

В этом уроке используются следующие детали:

Большая макетная плата на 1600 точек с 4 шинами питания:Купить
Набор резисторов из 100 штук на все случаи:Купить
Набор светодиодов из 100 штук:Купить
5 штук кнопок в удобной форме:Купить
Соединительные провода 120 штук:Купить

Подключение кнопки к Arduino

Как видите, ничего сложно в подключении кнопки к ардуино нет. Обратите внимание, что кнопка установлена так, что каждый ее контакт подключен к разным линиям макетной платы. Так же вы можете заметить резистор на 10 кОм который притягивает контакт к земле. Это нужно для того, что бы мы на 8 контакте не ловили наводок. Попробуйте убрать этот резистор из схемы. Светодиод будет загораться при шевелении проводов или кнопки. Теперь давайте рассмотрим скетч:

В этом уроке, как и прошлом, в самом начале мы объявляем переменные со значениями пинов к которым у нас подключены кнопка и светодиод. Далее в функции setup() мы обозначаем какой пин используется как вход, а какой как выход. В функции loop() мы используем условный оператор if с оператором сравнения и проверяем приходит ли на пин 8 высокий сигнал. Если да то включаем светодиод, если нет то выключаем. Описание функций и операторов вы найдете в справочнике по языку программирования Arduino

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

В этом скетче мы добавили переменные для хранения состояния светодиода и кнопки. Так же мы создали новую функцию для подавления дребезга контактов debounse(). Код в цикле loop() тоже немного изменился. Теперь в условном операторе мы проверяем нажата ли кнопка и если нажата, то меняем состояние светодиода на противоположное. Потом меняем переменную с последним состоянием на текущее состояние кнопки и включаем или выключаем светодиод.

Понравилось? Давайте еще больше усложним наш проект. Теперь мы будем управлять яркостью светодиода. Для этого нам надо немного изменить схему нашего устройства. Для управления яркостью мы будем использовать ШИМ. Значит нам надо подключить светодиод к выходу, который может выдавать ШИМ. Теперь наша схема будет выглядеть вот так:

Подключение светодиода к Arduino

Теперь светодиод подключен к 11 пину ардуино, которой умеет делать ШИМ. И нам пришлось добавить токоограничивающий резистор на 220 Ом перед светодиодом, что бы его не спалить. Это необходимо потому, что светодиоды работают при напряжении 3.3 В, а пин ардуино отдает 5 В. Теперь посмотрим что нужно изменить в скетче:

В этом примере мы изменили значение переменной ledPin на 11. Так же добавили переменную для хранения уровня ШИМ ledLevel. При нажатии на кнопку будем увеличивать эту переменную. Функция debounce() осталась без изменений. В цикле мы теперь используем функцию analogWrite().

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

24 комментариев

Здравствуйте)))
Подскажите пожалуйста новечьку,
Как можно реализовать такой скечь
При нажатии на кнопку светодиод плавно загорается если нажать ещё раз на кнопку то светодиод плавно тухнет…?

// переменные с пинами подключенных устройств
int switchPin = 8;
int ledPin = 11;

// переменные для хранения состояния кнопки и светодиода
boolean lastButton = LOW;
boolean currentButton = LOW;
int ledLevel = 0;

void setup() <
pinMode(switchPin, INPUT);
pinMode(ledPin, OUTPUT);
>

// функция для подавления дребезга
boolean debounse(boolean last) <
boolean current = digitalRead(switchPin);
if(last != current) <
delay(5);
current = digitalRead(switchPin);
>
return current;
>

void loop() <
currentButton = debounse(lastButton);
//первый цикл, постепенно включает светодиодик
if(lastButton == LOW && currentButton == HIGH) <
for(int i=ledLevel;i 255) ledLevel = 0;
>
currentButton = debounse(lastButton);

//второй цикл, постепенно выключает светодиодик
if(lastButton == LOW && currentButton == HIGH) <
for(int i=ledLevel;i>0;i=i-1) <
ledLevel = ledLevel — 1;
delay(100);
analogWrite(ledPin, ledLevel);>
//if(ledLevel > 255)
ledLevel = 0;
>

Очевидно при нажатии на кнопку в цикле менять значение ledLevel

Денис что такое ledlevel?

//Как можно реализовать такой скечь
//При нажатии на кнопку светодиод плавно загорается если нажать ещё раз на кнопку то светодиод плавно тухнет…?

/*== к примеру, вот так ==*/

// переменные с пинами подключенных устройств
int switchPin = 8;
int ledPin = 11;

// переменные для хранения состояния кнопки и светодиода
boolean lastButton = LOW;
boolean currentButton = LOW;
int ledLevel = 0;

// настройка изменения яркости
int deltaLevel = 5; // Шаг изменения яркости
int sign = 1; // Знак шага
int step_delay = 100; // задержка в шаге изменения яркости светодиода

// настройка сигнализатора окончания изменения яркости
int max_blink = 3; //число морганий светодиода на pin13 (LED_BUILTIN)
int blink_delay = 500; //задержка состояния светодиода на pin13 (LED_BUILTIN)

void setup()
<
pinMode(switchPin, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);// потушим светодиод на pin13 (LED_BUILTIN)
>

// функция для подавления дребезга
boolean debounse(boolean last)
<
boolean current = digitalRead(switchPin);
if(last != current)
<
delay(5);
current = digitalRead(switchPin);
>
return current;
>

// При нажатии на кнопку, светодиод медленно увеличивает яркость
// При повторном нажатии на кнопку, светодиод медленно гаснет
void loop()
<
currentButton = debounse(lastButton);
if(lastButton == LOW && currentButton == HIGH)
<
if(ledLevel == 0) sign = 1;
if(ledLevel == 255) sign = -1;
for(int i = 0; i 255) ledLevel = 255;
if(ledLevel
Света 2018-03-12 12:18:59

МУЖЧИНЫ кто согласится написать скетч за вознаграждение,к примеру на телефон.

Здравствуйте. Какой именно скетч вам нужен?

● Проект 2: Обрабатываем нажатие кнопки на примере зажигания светодиода

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

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

В данном эксперименте мы будем использовать контакт D2 Arduino в качестве входа. Это позволяет подключить к нему кнопку для взаимодействия с проектом в режиме реального времени. При использовании Arduino в качестве входов используют pull-up- и pulldown-резисторы, чтобы вход Arduino не находился в «подвешенном» состоянии (в этом состоянии он будет собирать внешние наводки и принимать произвольные значения), а имел заранее известное состояние (0 или 1). Резисторы pull-up подтягивают вход к питанию +5 В, pull-down-резисторы подтягивают вход к GND. Кроме этого, pull-up- и pull-down-резисторы гарантируют, что кнопка не создаст короткого замыкания между +5 В и землей при нажатии. В нашем эксперименте для подключения кнопки мы будем использовать pulldown-резистор. Схема подключения представлена на рис. 2.1.

Когда кнопка отключена, вход D2 будет подтянут к «земле» через резистор номиналом 10 кОм, который будет ограничивать поток тока, и на входном контакте будет установлено значение напряжения LOW. При нажатии на кнопку входной контакт напрямую связан с 5 В. Большая часть тока будет протекать по пути наименьшего сопротивления через замкнутую кнопку, и на входе генерируется уровень HIGH. При нажатии на кнопку включаем светодиод, при отпускании – гасим.
Код данного скетча приведен в листинге 2.1.

Порядок подключения:

1. Длинную ножку светодиода (анод) подключаем к цифровому выводу D10 Arduino, другую (катод) – через резистор 220 Ом к выводу GND (см. рис. 2.1).
2. Один вход кнопки подключаем к +5 В, другой – через резистор 10 кОм к GND, выход кнопки подключаем к входу D2 Arduino (см. рис. 2.1).
3. Загружаем в плату Arduino скетч из листинга 2.1.
4. При нажатии на кнопку светодиод должен гореть, при отпускании – затухнуть.

Усложним задачу – будем переключать состояние светодиода (включен/выключен) при каждом нажатии кнопки. Загрузим на плату Arduino скетч из листинга 2.2.

При нажатии кнопки светодиод должен изменять свое состояние. Но это будет происходить не всегда. Виной тому – дребезг кнопок.
Кнопки представляют из себя механические устройства с системой пружинного контакта. Когда вы нажимаете на кнопку вниз, сигнал не просто меняется от низкого до высокого, он в течение нескольких миллисекунд меняет значение от одного до другого, прежде чем контакты плотно соприкоснутся и установится значение HIGH.
Микроконтроллер зафиксирует все эти нажатия, потому что дребезг неотличим от настоящего нажатия на кнопку. Устранить влияние дребезга можно программно. Алгоритм следующий:

1. Cохраняем предыдущее состояние кнопки и текущее состояние кнопки (при инициализации LOW).
2. Cчитываем текущее состояние кнопки.
3. Если текущее состояние кнопки отличается от предыдущего состояния кнопки, ждем 5 мс, потому что кнопка, возможно, изменила состояние.
4. После 5 мс считываем состояние кнопки и используем его в качестве текущего состояния кнопки.
5. Если предыдущее состояние кнопки было LOW, а текущее состояние кнопки HIGH, переключаем состояние светодиода.
6. Устанавливаем предыдущее состояние кнопки для текущего состояния кнопки.
7. Возврат к шагу 2. Добавляем к нашему скетчу подпрограмму устранения дребезга.
Получаем код, показанный в листинге 2.3.

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

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

Устройство светодиода

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

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

1) Анод(+) светодиода имеет более длинный проводник
2) Со стороны катода(-), корпус светодиода немного срезан(не всегда)

А вот так выглядят светодиоды «в живую».

Это обычные одноцветные светодиоды. А бывают еще двух, и даже трехцветные. Вот так, например, выглядит трехцветный (RGB) светодиод:

У этого светодиода сразу четыре ноги. Одна — катод, а три другие — аноды для трех разных цветов.

В современной микроэлектронике применяются миниатюрные светодиоды для поверхностного монтажа. Такие индикаторы, например, имеются на Ардуино Уно для информирования пользователя о состоянии системы. Вот он светит зелененьким цветом:

Макетная плата

Используемый макетную плату, красные контакты которой подключены к пину +5 В , синие контакты – к пину Gnd (0 В) Arduino. Эти контакты используются в схемах и для питания внешних датчиков и модулей.

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

Схема включения

Чтобы зажечь светодиод, нам потребуется подключить его к +5в и GND ( последовательность подключения светодиода и резистора в схеме не имеет значения )

Катод светодиода подключим к минусу (земля)

Анод(длинная нога) же соединяем с +5В, через токозадающий резистор 220 Ом.

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

Резистор помогает решить две задачи. Во-первых, при подключении к источнику питания, светодиод старается бесконтрольно пропустить через себя как можно больше тока. Это может привести к самосожжению самого светодиода и к повреждению контроллера! Обычному светодиоду нужно всего 20 мА тока.

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

Учитывая эти два пожелания, мы можем рассчитать номинал нашего токозадающего резистора. Закона Ома в студию!

Итак, мы выяснили, что токозадающий резистор для классических выводных светодиодов имеет номинал 150 Ом, именно его мы и установим в схему.

Вообще, если под рукой нет резистора на 150 Ом, можно любой другой большего номинала. Просто светодиод будет гореть менее ярко.

Добавляем кнопку в схему

Разрываем плюсовой провод и подключаем в разрыв провода, кнопку как на схеме.

При нажатии кнопки светодиод будет светить)

Ссылка на основную публикацию
Adblock
detector