Ардуино бегущая строка

Светодиодная бегущая строка своими руками на Arduino Nano

Не буду вдаваться в подробности, что такое Arduino, такой информации просто навалом в Интернете и если Вам захочется найти описание, то без проблем это сделаете.

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

  1. MAX7219 Матричные Модуль Для Arduino Микроконтроллер
  2. Держатель батареи Крона 9В
  3. Переключатель
  4. Arduino Nano
  5. Батарейка «Крона». Ее не обязательно заказывать, можно приобрести в любом магазине

Компоненты для светодиодной бегущей строки 1 of 5Сборка из 4-х модулейЕдиничный модульArduino NanoПереключательДержатель для кроны

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

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

Монтируем модули между собой 1 of 4Соединяем модули между собойМонтаж крепления для кроныПриклеиваем ArduinoМонтаж кнопки

Дальнейшие наши телодвижения — пайка между собой модулей и пайка Arduino, с модулем согласно распиновке, которую можно увидеть на фото.

Паяем модули между собой 1 of 3

Минусовой контакт (черный проводник) от держателя кроны подключаем к пину GND Arduino Nano. Плюсовой провод (красный) соединяем с выключателем и с 30 пином тойже Arduino.

Программируем бегущую строку на Arduino Nano

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

Для установки библиотеки необходимо закрыть Arduino IDE в папку «Documents – Arduino – Libraries».

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

  1. ПJ Arduino
  2. Драйвер
  3. Скетч
  4. Библиотека 1
  5. Библиотека 2

Настраиваем скетч:

  1. «number of vertical displays» указывают количество матриц, в нашем случае 8
  2. «int wait» задают скорость вывода в миллисекундах.
  3. «string tape» указывают надпись, выводимую на дисплей

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

Отмечу, что строку можно собрать и с большим количеством модулей. Не обязательно ограничиваться только двумя модулями.

Бегущая строка на Arduino + управление со смартфона

Предисловие

С каждым годом на улице, в переходах, в магазинах появляется всё большее рекламных светодиодных панелей, на которых текст бегает и вверх, и вниз, и влево, и вправо, и выводятся всякие разноцветные картинки. Всё это само собой привлекает внимание прохожих и меня в том числе. И часто я задумывался, как же это сделано и можно ли что-то подобное повторить в домашних условиях. А как раз в этом семестре у нас была намечена курсовая работа по Схемотехнике, и одной из предлагавшихся тем была «Электронная бегущая строка». Я подумал: «Чем чёрт не шутит? Попробую».

Поиск необходимых материалов и первые шаги

Раньше как-то пробовал баловаться со светодиодами, точнее со светодиодной лентой, но это была простая светомузыка с использованием одного транзистора. А тут нужно же как-то и матрицу светодиодную сделать, и текст где-то хранить, и как-то его выводить. На «рассыпухе» просто так не сделать, по крайней мере с моим опытом.
Моя светомузыка:

Услышал, что можно делать на платформе Arduino. Раньше слышал, что есть такая крутая программируемая плата, что проект этот был стартапом, собравшим немалое количество денег, но в подробности не вдавался. А тут пришлось. Посмотрел несколько видео с примерами проектов, реализованных на Arduino, понравилось, купил.
В моей работе использовалась Arduino Uno R3, но не оригинальная, а копия. Как я почитал, особой разницы между копией и оригиналом нет. Плата Arduino имеет 14 цифровых входов/выходов, 6 аналоговых, входы внешнего питания, выходы +5 В, +3.3 В, GND. К компьютеру подключается с помощью USB. Для программирования микроконтроллера используется собственная IDE, которая распространяется бесплатно на официальном сайте Arduino.
С Arduino понятно, теперь надо решить, как сделать саму светодиодную матрицу. Изначально за основу разработки проекта была выбрана статья, в которой предлагалось использовать готовые модули со светодиодными матрицами и сдвиговыми регистрами. Схема представлена на рисунке 1. Использование готовых модулей, а именно MAX7219, значительно упростило бы разработку, так как необходимо было бы только всё правильно подключить и написать программу для корректной работы и вывода информации.

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

Разработка

Размер матрицы был выбран 8х10. Изначально планировалось для выбора столбца матрицы светодиодов использовать сдвиговый регистр 74HC595, который идёт в наборе с Arduino, а он имеет восемь выходов. Вот каждый бы и отвечал за определённый столбец. Однако в процессе пайки случайно была испорчена ножка регистра, отвечающая за выход Q0, поэтому от него пришлось отказаться. В этой схеме регистр по сути мог бы только сократить количество выходов Arduino, используемых для управления матрицей. При его использовании задействовалось бы только три выхода, а так пришлось пожертвовать 8-ю (со 2 по 9). Благо, что их там достаточно.
Схема регистра:

Для выбора строки матрицы был использован десятичный счётчик с дешифратором К176ИЕ8. Выбор пал на эту микросхему по причине её популярности, а также, потому что она имеет 10 выходов, как раз для управления 10-ю строками матрицы. Управляется счётчик с помощью микроконтроллера Arduino через входы сброса, счёта и выхода на 5 В.
Выходы счётчика подключаются к блоку транзисторов для управления светодиодной матрицей. Подключение будет рассмотрено в блоке транзисторов.
Схема счётчика:

В результате функциональная схема получилась следующего вида:

Блок транзисторов

Для управления светодиодами кроме сигнала, подаваемого на аноды со 2 по 9 портов Arduino, необходимо также подавать напряжение на катоды светодиодов. Делается это с помощью блока транзисторов.
Все катоды светодиодов каждой строки соединены между собой и подключены к коллекторам 10 транзисторов. Эмиттеры транзисторов подключены к «земле», а на базу приходят сигналы с выходов счётчика.
В этом проекте используются биполярные транзисторы npn типа 2N3904. Так как каждый транзистор подключён к своей строке матрицы, то всего в схеме их используется 10 штук. Выбор пал на этот вид транзисторов из-за их популярности, а также соответствия условиям разработанной схемы. Этот транзистор применяется в схемах с небольшим напряжение. Общий вид и УГО данного транзистора:

Теперь можно описать, как происходит загорание светодиода. С определённого порта Arduino подаётся сигнал на анод светодиода. В то же самое время на счётчика с определённого выхода подаётся сигнал на базу эмиттера. И с коллектора транзистора идёт напряжение на катоды светодиодов. Так как в матрице соединены последовательно аноды светодиодов соседних строк, а также последовательно соединены катоды светодиодов соседних столбцов, то в одно время происходит загорание нескольких светодиодов матрицы.
Важный момент! Ардуино на выходе выдаёт около 5 В, поэтому для подсоединения анодов светодиодов к Ардуино нужно использовать резисторы номиналом 220 Ом, а для подсоединения базы транзисторов к выходам счётчика – номиналом 1 КОм. Найти эти резисторы не составляет труда, тем более они идут в стартовом наборе Ардуино.

От мысли к действию, или от схемы к реализации

В результате пайки получилась следующее устройство.

Теперь всё это дело нужно было подключить к Ардуино. Код само-собой писался на C. Первым делом нужно проинициализировать используемы порты платы Arduino. Это делается в функции setup() следующим образом:

void setup(){ int i; for(i = 2; i < 10; i++) pinMode(i,OUTPUT); pinMode(clock,OUTPUT); pinMode(reset,OUTPUT); digitalWrite(reset,HIGH); delayMicroseconds(5); digitalWrite(reset,LOW); }
clock и reset – порты 11 и 10 Arduino соответственно.
Первым делом идёт указание, что порты со 2 по 9 используются в качестве выходных. Делается это в цикле с помощью метода pinMode(i, OUTPUT), где i –номер порта, OUTPUT – флаг, указывающий, что этот порт выходной.
Далее аналогичным образом инициализируются порты clock и reset. С помощью функции digitalWrite(reset, HIGH) происходит подача высокого уровня напряжения на порт reset, что тем самым делает сброс счётчика. После 5 мс задержки (delayMicroseconds(5)) на порт reset подаётся низкий уровень напряжения.
После инициализации портов нужно разработать алгоритм включения светодиодов для вывода тестовой информации и имитации их движения, т.е. сделать алгоритм бегущей строки.
Для этого была создана отдельная функция display_symbol(int loops), которая принимает в качестве аргумента значение задержки для имитации движения текста. Опытным путём было установлено, что лучше всё информация воспринимается, если значение задержки находится в промежутке от 15 до 25.
Рассмотрим внутреннюю реализацию функции display_symbol(int loops).
void display_symbol(int loops) { for(x=0;x<numsymbols-1;x++){ for (int z=0;z<8;z++){ for(int t=0;t<loops;t++){ for(y=9;y>-1;y—){ byte temp = symbols; byte temp_2=symbols; byte val = (temp<<z)+(temp_2>>7-z); for(int i =0; i<8; i++) digitalWrite(i+2, (val>>i)&B00000001); delayMicroseconds(800); digitalWrite(clock,HIGH); delayMicroseconds(5); digitalWrite(clock,LOW); } } } } }
Сначала видно четыре вложенных цикла. Самый наружный цикл, проходит по всем элементам байтового массива, т.е. по выводимым символам. Байтовым массив и его размерность задаётся разработчиком вручную выглядит наподобие следующего:
byte symbols={C, X, E, M, O, T, E, X, H, I_RUS, K, A }; const int numsymbols = 13;
Каждый символ разложен на 10 байт, что соответствует количеству строк, а каждый байт, как известно, состоит из 8 бит. Каждый бит отвечает за определённый светодиод на схеме. Пример разбитого на биты символа:
#define I_RUS {B00000000,B01000010,B01000010,B01000110,B01001010,B01010010,B01010010,B01100010,B01000010,B00000000}
Например, 0 и 9 байты выглядят как B00000000, это значит, что в 1 и 10 строках светодиоды гореть не будут. Сделано это для удобного чтения информации пользователем. А вот, например, 1-й байт со значением B01000010 указывает, что во второй строке для данного символа должны загораться 2 и 7 светодиоды. Таким образом из всех этих байт выстраивается символ буквы «И».
Вот, что получилось в результате:

А где же обещанное управление со смартфона?

В принципе результатом я остался доволен, как-никак первый раз так много паял и всё сразу заработало. Но захотелось большего, и я подумал добавить управление с Android смартфона по Bluetooth. Для Arduino есть готовый модуль HC-06. Схема его подключения к Arduino выглядит следующим образом:


Подробности подключения к Arduino и соединения со смартфоном описаны в этой статье: Блютуз модуль HC-06 подключение к Arduino. Соединение с телефоном и компьютером
В соответствии с этим код был изменён. И решил добавить ускоренное пролистывание текста, инверсное зажигание светодиодов и пролистывание текста с мерцанием. Ссылки на код для Android и Arduino будут ниже. В результате получилась вот такая штука:

Заключение

Сначала, что касается разработанного курсового. Главным достоинством разработанного устройства является его универсальность. Благодаря использованию программируемой платы Arduino проект можно расширять использованием различных датчиком и написанием соответствующих прошивок. В результате кроме функционала бегущей строки можно добавить и функционал вывода состояния погоды, используя соответственно датчики температуры, влажности, атмосферного давления. Если добавить какой-нибудь датчик звука, то можно доработать схему до музыкального эквалайзера.
А общие выводы заключаются в том, что Arduino – действительно классная штука, с помощью которой в домашних условиях можно сделать множество полезных и просто крутых штук, которые раньше могли сделать люди, посвятившие электронике не один год. Тем более, что есть множество примеров различных устройств на Ардуино в Интернете в открытом доступе. Уже есть даже множество книг по Ардуино, одну из которых я точно советовал бы для рассмотрения в качестве руководства для начинающих и продвинутых разработчиков: Arduino CookBook.
Ссылки на код:

Ежегодно на вывесках магазинов, улицах и переходах устанавливаются панели, отражающие рекламные записи в виде текста. Огоньки на панелях зажигаются по-разному: строки передвигаются вверх, вниз, в правую и левую сторону. Также актуальны светящиеся картинки.

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

Что такое бегущая строка на Ардуино

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

Световые строки создаются с помощью модулей. Размер по умолчанию – 32х16 см. Область, предназначенная под рабочую поверхность, напрямую зависит отношению количеству модулей и их размеру.

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

По цветовой гамме различают 2 вида бегущей строки на Arduino:

  1. Монохромный или одноцветный.
  2. Разные оттенки – обычно 8 цветов, здесь также включен черный фон.

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

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

  1. Базовый – через USB-кабель. Микропроцессор Ардуино подключается через USB-порт к компьютерному устройству. С компьютера разработчик переносит свой программный код в память микропроцессора.
  2. По сети через Лан-кабель. Способ предусмотрен для тех пользователей, которые постоянно обновляют электронную строку. Техника подключения аналогична предыдущему пункту.

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

Необходимый набор инструментов и материалов

Ниже приведена таблица с подробным описанием инструментов, которые понадобятся для конструирования бегущих огней на Ардуино.

Инструмент Особенности
Arduino Nano Нано – модель, которая по размерам самая миниатюрная среди линейки Ардуино. По своему характеру данная платформа напоминает своего сородича – Ардуино Уно. Начинающие электронщики, в основном, строят компактные модели своих устройств, поэтому в этом пригодится компактная Нано. Гнездо под внешнее питание спрятано внутри. Работа производится через USB-порты. Остальные характеристики схожи с моделью Уно.

Технические параметры:

  • напряжение, требуемое для питания устройства, – 5 Вольт;
  • масса – 7 грамм;
  • размер – 19х42 мм;
  • рабочая частотность – 16 МГц;
  • флеш память – 16 Кб;
  • оперативная память – 2 Кб;
  • цифровые пины – 14 штук, причем 6 можно использовать, как ШИМ-выходы
  • требуемое питание при входе – около 12 Вольт.

Существует 2 способа для питания платформы:

  1. Через микро-USB или мини-USB.
  2. При использовании внешнего питательного элемента, в котором общее напряжение от 6 до 20 Вольт. Практически отсутствуют пульсационные волны.
Лента из светодиодов Лента из светодиодов подключается параллельным способом, по несколько отрезков. Каждый отрезок должен быть не больше 5 м в длину. Кроме того, в магазинах она продается именно по таким меркам. Если же потребуется создать строку, на которую нужно 10 или даже 15 метров, придется повозиться. Нельзя ни при каких условиях соединять первый кусок с началом второго. Считается, что 5 метров – длина, показывающая расчет, при котором удерживаются дорожки ленты. Если нагрузить ленту, то произойдет поломка, и сделанное изделие испортится.

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

Провода Набор проводов для соединения компонентов
Плата для управления процессом На управляющую платформу помещается микропроцессор и остальные части для готового изделия (например Тройка Шилд).

Чертежи и схемы

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

Внимание! На выходе у платформы получается 5 Вольт. Чтобы подключить аноды в плате, необходимо использовать резисторы, которые будут работать в 220 Ом. В то же время для подключения блока транзисторов к выходам потребуются резисторы на 1 КОм.

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

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

Есть еще один вариант исполнения:

Схема будет выглядеть так:

Сборка

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

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

  • VCC – VCC
  • GND – GND
  • D IN – D OUT
  • CS – CS
  • CLK – CLK

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

  • VCC – 5V
  • GND – GND
  • D IN – PIN 11
  • CS – PIN 10
  • CLK – PIN 13.

На заключительной стадии сборки необходимо подключить питание от батарейки. Для этого минусовой контакт (черный провод) из отсека для кроны подключается на вывод GND Arduino. Плюсовой контакт (красный провод) соединяют с выключателем, а затем с выводом №30 Arduino, предназначенный для подачи питающего напряжения от нерегулируемого источника. В тестовом режиме сделанная своими руками бегущая строка может быть запитана через микро USB от компьютера. Убедившись в надежности креплений и качестве электрических соединений, приступают к сборке корпуса. Его можно сделать из алюминиевого или пластикового профиля, так как элементы схемы не греются. Цвет, размеры, степень защиты и крепление корпуса зависят от будущего назначения устройства. В простейшем случае подойдёт защитный экран из строительного пластикового углового профиля с вырезом под выключатель.

Программирование бегущей строки

Бегущая строка из Arduino и светодиодных модулей под управлением MAX7219 практически готова. Настало время перейти к заключающей, программной части. На компьютере должно быть установлено программное обеспечение (ПО) для используемого Arduino и драйвер к нему. Далее необходимо скачать две библиотеки и скетч (специальную программу, которая будет загружаться и выполняться процессором Arduino). Установку библиотек производят при закрытом Arduino IDE в папку «Documents – Arduino – Libraries». Затем скачивают и запускают скетч и проверяют наличие библиотек и корректность других данных.

Библиотека 1: arduino-Max72xxPanel
Библиотека 2: Adafruit-GFX-Library

Настройка скетча:

  • «number of horizontal displays» указывают количество строк, в нашем случае 1;
  • «number of vertical displays» указывают количество матриц, в нашем случае 8;
  • «string tape» указывают надпись, выводимую на дисплей;
  • «int wait» задают скорость вывода в миллисекундах.

После проверки введенных данных остаётся щелкнуть мышкой на кнопку «загрузить». Затем отключиться от ПЭВМ, вставить батарейку и произвести запуск устройства.

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

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

Публикация от Pavel V. Hladkikh (@eu4dgc) Мар 8, 2018 в 1:40 PST

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

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

Вывод пикселей с помощью библиотеки Max72xxPanel

Для управления микросхемой MAX7219 воспользуемся библиотекой Max72xxPanel. Скачать её можно по ссылкам в конце статьи.

Установим библиотеку и напишем небольшой код, который будет выводить на дисплей всего одну точку с координатами x=3 и y=4. Точка будет мигать с периодом 600 миллисекунд.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include <SPI.h> #include <Adafruit_GFX.h> #include <Max72xxPanel.h> int pinCS = 10; int numberOfHorizontalDisplays = 1; // количество матриц по-горизонтали int numberOfVerticalDisplays = 1; // количество матриц по-вертикали Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays); void setup() { matrix.setIntensity(4); // яркость от 0 до 15 } void loop() { matrix.drawPixel(3, 4, HIGH); // зажигаем пиксель с координатами {3,4} matrix.write(); // вывод всех пикселей на матрицу delay(300); matrix.drawPixel(3, 4, LOW); // гасим пиксель matrix.write(); delay(300); }

Как уже говорилось ранее, матричные модули с микросхемой MAX7219 можно легко объединять. Именно для этой цели в начале программы мы задаем количество матриц по-горизонтали и по-вертикали. В данном случае используется одна матрица, так что оба этих параметра будут равны 1.

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

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

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

matrix.setRotation( 0, 1 );

первый параметр — это индекс матрицы, в нашем случае он равен нулю; второй параметр — количество поворотов на 90 градусов.

Вывод текста с помощью библиотеки Adafruit-GFX-Library

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

В популярной библиотеке Adafruit-GFX-Library помимо функций для работы с графикой и текстом, имеется и база латинских букв в верхнем и нижнем регистрах, а также все знаки препинания и прочие служебные символы. Ссылка на библиотеку есть в конце статьи.

Отобразить символ на матрице можно с помощью функции drawChar.

drawChar( x, y, символ, цвет, фон, размер );

Первые два параметра функции отвечают за координаты верхнего левого угла символа. Третий параметр — это сам символ. Цвет символа в нашем случае будет равен 1 или HIGH, так как матрица двухцветная. Фон равен 0 или LOW. Последний параметр «размер» сделаем равным 1.

Напишем программу, которая будет по-очереди выводить на матрицу все буквы фразы: «HELLO WORLD!».

Примечание. В библиотеке Adafruit_GFX имеется множество функций для работы с графикой. Например, drawCircle( 3, 3, 2, HIGH ) начертит окружность с центром {3,3} и радиусом 2. Последний параметр — цвет, но в случае монохромной матрицы он равен 1 или HIGH. Функция drawLine( 0, 0, 3, 6, HIGH ) начертит отрезок между точками {0,0} и {3,6}.

Программирование бегущей строки.

Бегущая строка из Arduino и светодиодных модулей под управлением MAX7219 практически готова. Настало время перейти к заключающей, программной части.

Бегущая строка на светодиодных модулях MAX7219 и Arduino

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 #include <SPI.h> #include <Adafruit_GFX.h> #include <Max72xxPanel.h> int pinCS = 10; // Подключаем CS к 10-му пину, DIN к MOSI и CLK к SCK int numberOfHorizontalDisplays = 1; // Количество модулей по горизонтали int numberOfVerticalDisplays = 8; // Количество модулей по вертикали Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays); String tape = «»; int wait = 10; // Скорость прокрутки в миллисикундах int spacer = 1; // Промежуток между символами (кол-во точек) int width = 5 + spacer; // Ширина символа /* Перекодировка русского шрифта из UTF-8 в Windows-1251 */ String utf8rus(String source) { int i,k; String target; unsigned char n; char m = { ‘0’, ‘\0’ }; k = source.length(); i = 0; while (i < k) { n = source; i++; if (n >= 0xC0) { switch (n) { case 0xD0: { n = source; i++; if (n == 0x81) { n = 0xA8; break; } if (n >= 0x90 && n <= 0xBF) n = n + 0x2F; break; } case 0xD1: { n = source; i++; if (n == 0x91) { n = 0xB7; break; } if (n >= 0x80 && n <= 0x8F) n = n + 0x6F; break; } } } m = n; target = target + String(m); } return target; } /* Код для работы с com-портом */ String Serial_Read() { unsigned char c; // переменная для чтения сериал порта String Serial_string = «»; // Формируемая из символов строка while (Serial.available() > 0) { // Если в сериал порту есть символы c = Serial.read(); // Читаем символ //Serial.print(c,HEX); Serial.print(» «); Serial.print(c); if (c == ‘\n’) { // Если это конец строки return Serial_string; // Возвращаем строку } if (c == 0xB8) c = c — 0x01; // Коррекция кодов символа под таблицу ???? так как русские символы в таблице сдвинуты относительно стандартной кодировки utf на 1 символ if (c >= 0xBF && c <= 0xFF) c = c — 0x01; Serial_string = Serial_string + String(char(c)); //Добавить символ в строку } return Serial_string; } void setup() { Serial.begin(9600); tape = utf8rus(«QSY.BY Amateur Radio WorkShop»); // Этот текст выводиться при включении или если в com-порт не пришла информация matrix.setIntensity(3); // Яркость от 0 до 15 matrix.setRotation(matrix.getRotation()+3); //1 — 90 2 — 180 3 — 270 } void loop() { if (Serial.available()){ tape=Serial_Read(); } for ( int i = 0 ; i < width * tape.length() + matrix.width() — 1 — spacer; i++ ) { matrix.fillScreen(LOW); int letter = i / width; // Номер символа выводимого на матрицу int x = (matrix.width() — 1) — i % width; int y = (matrix.height() — 8) / 2; // Центрируем текст по вертикали while ( x + width — spacer >= 0 && letter >= 0 ) { if ( letter < tape.length() ) { matrix.drawChar(x, y, tape, HIGH, LOW,1); } letter—; x -= width; } matrix.write(); // Вывод сообщения на экран delay(wait); } }

Расписывать код не вижу смысла. Он и так хорошо прокомментирован. Однако есть некоторые особенности, о которых стоит упомянуть.

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

Кусок кода для работы с com-портом, нужен для того чтобы оперативно менять текст сообщения выводимого на светодиодный модуль. Однако он нужен нам не только для этого. В дальнейшем посредством этой функции мы свяжем наш Telegram Bot и бегущую строку на Arduino.