Мигание несколькими светодиодами ардуино нано

Содержание

Работаем с множеством светодиодов

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

Сам принцип работы со светодиодами не меняется, мы также задаём номера выводом и подаём нужные сигналы. Но проблема заключается в том, что придётся писать однотипный код для каждого светодиода. И когда светодиодов наберётся большое количество и вы решите поменять логику, то придётся искать и менять код у каждого светодиода. Это не очень удобно. Поэтому для облегчения рутинной работы используют циклы, массивы, коллекции.

05.Control: ForLoopIteration

Для знакомства с циклом for в Arduino IDE есть пример File | Examples | 05.Control | ForLoopIteration.

Для эксперимента нам понадобятся шесть светодиодов. Соответственно, к ним нужно добавить шесть резисторов. Соединяем их как на рисунке. Задействуем цифровые выводы 2, 3, 4, 5, 6, 7.

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

Доказательство, что код работает.

05.Control: Arrays

Обращаться к каждому светодиоду можно не только по очереди в цикле, но и через массив. Использование массивов даёт больше гибкости. Посмотрим на примере File | Examples | 5.Control | Arrays. Схема остаётся прежней из предыдущего примера.

Массив объявляется с помощью квадратных скобок, а затем к переменной массива обращаются, указывая в квадратных скобках индекс массива, который начинается с 0. Таким образом, чтобы обратиться к первому элементу массива, следует писать ledPins[0] и т.д. Комментарии к скетчу смотрите в предыдущем примере.

Если вы замените строку int ledPins[] = <2, 7, 4, 6, 5, 3>; на int ledPins[] = <2, 3, 4, 5, 6, 7>;, то получите точно такое же поведение светодиодов из предыдущего примера с циклом for, когда светодиоды загораются и гаснут по очереди. Но использование массива позволяет поменять начальное положение светодиодов, не меняя остальной код. И вы можете только в одном месте менять начальные позиции для запуска волны. Например, зададим массив через одного: .

Бегущие огни

Ещё один вариант бегущих по порядку огней. На этот раз уместим код в один цикл for, добавив переменную, следящую за направлением движения.

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

07.Display: barGraph (Световая шкала и потенциометр)

Рассмотрим пример с использованием светодиодной шкалы и потенциометра — Examples | 07.Display | barGraph. Если световой шкалы нет, то замените на 10 обычных светодиодов.

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

Добавим на схему потенциометр. Средняя ножка ведёт на аналоговый вывод A0, а остальные две на 5 V и GND.

Данный пример интересен функцией map(), предназначенной для пропорционального перевода значений одного диапазона в значения другого диапазона. Мы знаем, что потенциометр может выводить результаты от 0 до 1023, а у нас всего десять светодиодов. Функция нам и поможет в преобразовании.

Все значения будут равномерно распределены от 0 до 10 (приблизительно 102 единицы потенциометра на одну единицу). Представим себе, что у нас потенциометр показывает значение 110 единиц, что соответствует значению 1 после применения функции. Первый светодиод в массиве имеет значение 0, т.е. меньше 1. Первый светодиод загорится, а остальные погаснут (если горели до этого). Поворачивая ручку потенциометра, мы увеличиваем значения и соответственно увеличиваем число включённых светодиодов. Поворачивая ручку потенциометра в обратную сторону, мы уменьшаем число включённых светодиодов. Чтобы следить за результатами, добавьте в код наблюдение за последовательным портом Serial

Модуль 2-цветного светодиода KY-011

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

Контакт S предназначен для соединения с общим проводом схемы, отрицательный полюс питания, средний контакт – красный источник света. При работе с модулем следует использовать резисторы (напр, 330Ω).

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

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

Модуль 2-цветного светодиода KY-029

Модуль KY-029 с общим катодом похож на модуль KY-011, только вместо светодиода на 5 мм используется двухцветный светодиод на 3 мм (зелёный и красный).

У модуля три вывода: (GND) — общий катод светодиодов, средний контакт — анод (+) красного светодиода, «S» — анод (+) зелёного светодиода.

Скетч используйте от модуля KY-011.

Семицветный светодиодный модуль KY-034

Модуль состоит из печатной платы, трёх выводов, сопротивления 10кОм (код SMD-резистора 103) и семицветного светодиода.

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

Программирования не требуется. Просто подключаем вывод к GND и S к 5V. При желании можете подключить не к питанию, а к цифровому пину Arduino и управлять включением и выключением светодиода (например, скетч Blink).

Входит в состав набора Набор из 37 датчиков

Источник

Умное мигание светодиодом в Ардуино

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

Бывает при программирование какого-нибудь устройства не хватает портов ввода-вывода микроконтроллера. Или из экономических соображений, а может нехватки места в корпусе, не хочется устанавливать дисплей, а как то сигнализировать о режимах работы устройства очень хотелось бы. Часто достаточно сигнализировать о этих режимах горением или миганием светодиода. А если режимов много?

На мысль меня навела автомобильная сигнализация, в которой я как то программировал режим автозапуска. Там, чтобы установить, например, 14-й бит определенного регистра нужно было после входа в режим программирования этого регистра 14 раз нажать на определенную кнопку брелка, а потом дождаться 14-ти коротких сигналов (или мигания поворотников). Затем нажать кнопку в подтверждения и услышать длинный сигнал. Гениально! Никаких дисплеев и экранных меню. Правда, одновременно, и жутко неудобно.

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

Начнем с простого.

Пример мигания светодиодом для Ардуино

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


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

Поэтому отказываемся от delay() и переходим на события с использованием millis()

Использование событий с использованием millis()

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

Обработка битовой матрицы состояния светодиода

Уменьшаем время срабатывания события до 1/8 секунды и в 1 байте кодируем 8 бит состояний, отображаемых последовательно.

Первые три режима работы светодиода простые. А вот остальные уже можно использовать для демонстрации режима микроконтроллера:

Короткая вспышка 1 раз в секунду

Две вспышки в секунду

Три вспышки

И постоянные вспышки четыре раза в секунду

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

Что если 8 бит состояний светодиодов мало?

Использование 4-х байт для определения состояния светодиода

Получаем циклический сигнал SOS — три коротких, три длинных и снова три коротких сигнала светодиодом, повторяемый каждые 4 секунды

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

Только хардкор. Только прерывания!

Берем 16-ти битный Таймер 1. Устанавливаем прерывание на переполнение за 125мс

Подробно по программированию таймера можно почитать здесь. При этом delay() на 5 секунд в Loop() совершенно не мешают управлению нашим светодиодом.

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

Если с программированием регистров таймера сложно, а прерывание по таймеру использовать интересно —

Прерывание по таймеру с «человеческим лицом»

Добрые люди написали программный интерфейс к таймеру в виде библиотеки TimerOne

Ну, и напоследок, код для тех, кто как и я «грызет» программирование WiFi модулей ESP8266 в среде Arduino IDE.

Прерывание по таймеру в ESP8266

Там другие добрые люди прямо в ядро ESP для Arduino встроили библиотеку Ticker

Использовать прерывания в ESP следует осторожно, так как очень часто это вызывает срабатывание злобного сторожевого таймера WDT, который считает, что на обработку встроенных WiFi функций выделяется слишком мало времени.

Надеюсь, эта статья будет немного полезной для всех любителей мигать светодиодами в Ардуино и не только им.

Источник

Мигающий светодиод Ардуино Нано, Уно

Мигание светодиодом Ардуино, встроенного в плату — один из первых примеров скетчей, для начинающих изучать программирование микроконтроллера Arduino Uno или Arduino Nano. Разберем несколько примеров — мигание встроенным светодиодом, мигание без delay, мигание несколькими светодиодами. Прочитав статью до конца, вы поймете, как управлять миганием светодиодов, подключенных к Ардуино.

Мигание светодиодом на Ардуино Нано, Уно

Для этого занятия потребуется:

  • Arduino Uno / Arduino Nano / Arduino Mega;
  • светодиоды и резисторы;
  • макетная плата;
  • провода «папа-папа».

Платы данного семейства имеют встроенный светодиод на плате, подключенный к пину 13 через резистор. Этот светодиод мигает при включении или перезагрузке микроконтроллера. Можно с помощью программы управлять включением и выключением (миганием) светодиодом, который «висит» на 13 пине Arduino Uno и Nano. При этом не потребуется даже собирать на макетной плате электрическую схему.

Мигание встроенным светодиодом на плате

Для первого примера не потребуется собирать принципиальную схему. Код программы, используется из примера «Подключение светодиода к Ардуино». Встроенный светодиод подключается через резистор, поэтому к 13 пину можно подключать внешний светодиод без резистора. Это самый простой скетч, с которого начинают знакомство с Ардуино, скопируйте код и загрузите его в микроконтроллер через Arduino IDE.

Скетч. Мигание встроенным светодиодом Ардуино

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

  1. delay(); останавливает программу на заданное количество микросекунд;
  2. данный код подойдет к плате Arduino Nano и Arduino Mega.

Мигание светодиода на Ардуино без delay

В коде используется функция millis, которая возвращает количество миллисекунд с момента начала программы. Благодаря этой функции можно организовать многозадачность микроконтроллера. В отличии от функции delay(); , программа не останавливает выполнение команд в скетче, а считает когда пройдет заданное количество миллисекунд и может выполнять параллельные задачи.

Схема для мигания светодиодом на Ардуино без delay

Скетч. Мигание светодиода на Arduino Uno без delay

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

  1. каждые 500 миллисекунд состояние переменной boolean меняется на противоположное с помощью команды ledState=!ledState .

Мигание двух светодиодов на Ардуино Уно

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

Мигание несколькими светодиодами на Ардуино одновременно

Скетч. Мигание несколькими светодиодами одновременно

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

  1. включение/выключение светодиодов происходит поочередно;
  2. одновременное включение можно сделать, поменяв местами строчки в коде.

Заключение. В этом обзоре мы рассмотрели, как сделать мигающий светодиод на Arduino Nano или Uno. Заставить светодиод мигать можно с помощью задержки delay или через millis. Если у вас остались вопросы по данной теме, то можете их смело оставлять в комментариях к этой записи. Мы постараемся ответить на все вопросы по мере поступления. Желаем успехов в освоении программирования Arduino.

Источник

Adblock
detector