Avto505.ru

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

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

  • 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)::

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

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

Я смотрел, в библиотеке вроде как много файлов должно быть?

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

Чтобы я мог помещать сюда куски своего кода копипастом, я назову библиотеку SmartButton, ладно? Болванку MyLib можно прибить за ненадобностью.

По аналогии с предыдущим пунктом, создаём папку SmartButton, в ней:

SmartButton.h — То, что мы будем включать в наши программы. Там будут только определения, без кода.
SmartButton.cpp — Программный код класса

Читать еще:  Датчик на гофре воздушного фильтра

Это не скетч! Обратите внимание, что расширение файла cpp (C++). README.md — Файл описания библиотеки «для людей», то есть, документация

«md» означает MarkDown, то есть с разметкой. Достаточно назвать просто README.
library.json — описание библиотеки для Arduino IDE в хитром формате JSON.
examples — папка с примерами, которые будут потом видны в Arduino IDE. В ней должны лежать папки с именами примеров, в а них с тем же именем файлы с расширением ino — скетчи.

Давайте поясню суть затеи. Мы не знаем, что нам будет нужно от кнопки. Наш МКА умеет находиться в состояниях Клик, Нажатие, Удержание и СлишкомДолгоеУдержание, а так же выходить из этих состояний в состояние Выключен. Так как мы делаем библиотеку универсальную, то надо предоставить возможность другому программисту вставить свой код в обработчики состояний. В ООП есть для этого замечательное средство — наследование.

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

Например, мы захотим сделать кнопку-переключатель, то есть, одно нажатие — включено, другое — выключено. Будем зажигать и гасить светодиод и предоставим функцию isOn() для использования в классическом виде в функции loop().

Как видите, нас совершенно здесь не интересует МКА кнопочки из предыдущей статьи, кода этой кнопки нет, он спрятан. Мы добавили свою функциональность к базовому классу и сделали переключатель по клику. Наш новый класс Toggle тоже можно оформить в виде библиотеки, кстати или положить в отдельный файл Toggle.h рядом с вашим скетчем, вам достаточно будет его подключить директивой #include. Мы так же задаём ногу со светодиодом для подсветки кнопки

Обратите внимание, что мы просто создали два объекта (bt и drill) нового класса Toggle, а МКА обработки кнопки для нас скрыт и не заботит

Основываясь на классе SmartButton можно сделать свои классы, что понимают двойной клик, например, водят курсор по меню или поворачивают пулемётную турель медленно-быстрее в зависимости от времени удержания кнопки. Для этого достаточно определить свои методы, описанные в SmartButton.h как virtual. Все определять не обязательно, только нужные вам.

По просьбе целевой аудитории, вот пример класса PressButton, который предоставляет методы:

  • pressed() — кнопка была нажата, можно вызывать много раз.
  • ok() — я понял, слушай кнопку дальше, то есть сброс.

Таким образом мы получаем две независимо работающие «залипающие» кнопки, которые после нажатия находятся в состоянии pressed пока их не сбросить методом ok().

Если у вас есть меню, вы можете определить методы onClick() у кнопок «вверх» и «вниз», которые будут вызывать перемещение курсора меню на дисплее с соответствующем направлении. Определение onHold() у них может вызывать перемещение курсора в начало и конец меню, например. У кнопки «ентер» можно определить onClick() как выбор меню, onHold() как выход с сохранением, а onLongHold() как выход без сохранения.

Если вам нужен двойной клик, ну, определите onClick так, чтобы у вас там был счётчик нажатий и время с предыдущего нажатия. Тогда вы сможете различать одинарный и двойной клик.

SmartButton — это просто МКА, это инструмент для реализации поведения ваших кнопок.

Где же скрыта вся магия? Магия кроется в файле SmartButton.cpp

Логика местами спорная, я знаю 🙂 Но это работает.

Теперь осталось заполнить файл README описанием вашей библиотеки и заполнить по аналогии файлик library.json, где поля вполне очевидны:

Если у вас нет репозитория, можно эту секцию не указывать.

Ура! Библиотека готова. Можно запаковать папку в ZIP и раздавать друзьям или копировать на другие свои компьютеры.

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

Читать еще:  Потеет фара приора причина

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Программа для работы с кнопкой на Ардуино

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

Эта функция возвращает логическое значение, которое Ардуино считала с заданного контакта. Это означает, что если на контакт подать напряжение +5В, то функция вернет истину*. Если контакт соединить с землей, то получим значение ложь. В языке C++, истина и ложь эквивалентны числам 1 и 0 соответственно.

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

Наконец, соберем всё вместе, и напишем программу.

Загружаем программу на Ардуино Уно, и проверяем работу программы. Если всё сделано правильно, должно получиться как на картинке:

Ну вот и всё. Теперь мы можем управлять нашими устройствами при помощи кнопок. Если вы уже прошли урок по подключению ЖК дисплея, то мы вполне сможем сделать часы с будильником!

Что нужно, чтобы подключить LED к плате Arduino

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

    Использовать встроенный светодиод. В этом случае не понадобится больше ничего, кроме кабеля для подключения к ПК через разъем USB – для питания и программирования. Внешний источник напряжения для запитывания платы применять бессмысленно: потребляемый ток невелик.

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

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

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

В этом коде Вы могли заметить Light = !Light . Сейчас объясню. Мы считываем была ли кнопка опущена. Далее небольшой задержкой определяем не было ли это ошибкой и если кнопка действительно была нажата инвертируем сигнал светодиода. То есть если светодиод горел – он перестанет гореть. И наоборот.

Читать еще:  Как правильно перевозить грудных детей в машине

Собираем простые схемы на макетной плате

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

НазваниеОсобенность подключенияКакую функцию выполняетКартинка
Светодиодыэто полярный элемент, у него есть + и — (или анод и катод)Красиво горит
Резисторыдля нашего опыта понадобиться резистор от 300 до 1000 ОмОграничивает ток, чтобы светодиод не сгорел
Тактовая кнопкаС двумя или четырьмя контактамиЗамыкает и размыкает цепь
Батарейный отсекС двумя пальчиковыми батарейками AA по 1,5 вольта каждаяПитает схему
Плата Arduino NanoВставляется в макетную платуКонтроллер который позволяет нам программировать электронные схемы

Упражнение 1. Заставим светодиод гореть.

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

Наш наш вариант сборки на макетной плате.

Рис. 2 Пример сборки схемы на макетной плате.

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

Упражнение 2. Схема с двумя светодиодами подключенными последовательно и кнопкой.

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

Рис. 3 Принципиальная схема к упражнению 2. Подключение двух светодиодов последовательно.

Попробуйте собрать эту схему самостоятельно. Ниже — наше решение.

Рис. 4. Сборка схемы с двумя светодиодами на макетной плате.

Упражнение 3. Параллельное подключение светодиодов

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

Рис. 4. Сборка схемы с двумя подключенными параллельно светодиодами на макетной плате.

4) Подключение светодиода к плате Arduino.

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

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

Соберем вот такую схему, на ней светодиод питается от выхода платы Arduino Nano 5V (этот порт не нужно программировать, он всегда выдает постоянное напряжение 5 вольт).

Рис. 7. Подключение светодиода к плате Arduino c помощью макетной платы.

При сборке схем на макетной плате с платой Arduino будьте внимательны: когда Вы перекидываете провода между рядами, не попадите случайно в ряд с ПИНом GND (Ground — Земля) , так может получиться короткое замыкание. Старайтесь держать в голове, какие ножки на плате работают в данный момент (выдают или принимают напряжение), а какие не задействованы.

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

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

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

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

голоса
Рейтинг статьи
Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector