Бегущая строка на WS2812B, 16х16
В данном материале подробно расскажу, как соединить плату Arduino UNO с гибкой RGB-матрицей формата 16×16 (основа — чип WS2812B). Предоставлю наглядную схему подключения и пример готовой программы для реализации эффекта бегущей строки с текстом.

Необходимые детали:
► Контроллер Arduino UNO R3 x 1 шт.
► Провода DuPont, 2,54 мм, 20 см x 1 шт.
► Гибкая светодиодная панель WS2812B, RGB, 16×16 x 1 шт.
► Блок питания (сетевой адаптер) универсальный 5В 5А, штекер 5.5 х 2.5 x 1 шт.
Описание:
В данном примере с помощью контроллера Arduino UNO мы создадим эффект бегущей строки на гибкой светодиодной матрице WS2812B.
Подключение:
Управление матрицей WS2812B с помощью Arduino UNO выполняется посредством единственного соединения: вывод «D2» Arduino UNO подключается к выводу «DATA IN» матрицы. Для питания матрицы необходимо дополнительно подсоединить внешний блок питания с напряжением 5 В и силой тока минимум 5 А. Важно также убедиться, что общий провод («GND») блока питания соединён с общим проводом («GND») Arduino.
Установка библиотеки:
Чтобы запустить скетч, потребуется установить три библиотеки: «Adafruit_NeoPixel», «Adafruit_NeoMatrix» и «Adafruit_GFX». Проще всего это сделать, используя интегрированную среду разработки Arduino IDE, для этого откройте Скетч → Подключение библиотеки → Менеджер библиотек…



Установка шрифтов:
Чтобы обеспечить поддержку русского текста, требуется скачать шрифта и скопировать её содержимое в директорию «Adafruit_NeoMatrix», расположенную по пути: C:\Users\Ваше_Имя\Documents\Arduino\libraries\Adafruit_NeoMatrix.

Программа:
Запустите программу Arduino IDE, вставьте приведенный ниже код и загрузите его на вашу плату 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 |
#include <Adafruit_NeoPixel.h> // Подключаем библиотеку NeoPixel #include <Adafruit_NeoMatrix.h> // Подключаем библиотеку NeoMatrix #include <Adafruit_GFX.h> // Подключаем библиотеку GFX #include "FontsRus/TimesNRCyr9.h" // Специальный русский шрифт TimesNewRoman Cyrillic размером 9px #define PIN 6 // Номер пина к которому подключены светодиоды // Создание объекта матрицы с параметрами: // Ширина и высота матрицы (16х16), // Расположение матрицы (нижняя правая сторона, столбцы слева направо зигзагообразно), // Цветовая схема (RGB) и частота передачи сигнала (800 КГц) Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(32, 16, PIN,NEO_MATRIX_BOTTOM + NEO_MATRIX_RIGHT + NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG,NEO_GRB + NEO_KHZ800); // Массив трех основных цветов (красный, зеленый, синий) const uint16_t colors[] = { matrix.Color(255, 0, 0), // Красный matrix.Color(0, 255, 0), // Зеленый matrix.Color(0, 0, 255) // Синий }; void setup() { matrix.begin(); // Инициализация матрицы matrix.setTextWrap(false); // Отключаем автоматический перенос текста matrix.setBrightness(10); // Устанавливаем яркость матрицы (от 0 до 255) matrix.setTextColor(colors[0]); // Текущий цвет текста красный } // Переменные для эффекта прокрутки текста int x = matrix.width(); // Начальная позиция текста справа от края матрицы int pass = 0; // Индекс текущего цвета в массиве цветов void loop() { matrix.fillScreen(0); // Очистка экрана matrix.setCursor(x, 13); // Определяем позицию начала текста (x, y) matrix.setFont(&TimesNRCyr9pt8b); // Используем наш шрифт TimesNRCyr9 matrix.print(F("ПРИВЕТ RobotChip"));// Выводим текст на экран // Логика перемещения текста и смены цвета if(--x < -300) { // Когда текст выходит за пределы экрана... x = matrix.width(); // Возвращаем текст обратно вправо if(++pass >= 3) pass = 0; // Меняем индекс цвета (циклическое переключение) matrix.setTextColor(colors[pass]);// Применяем следующий цвет из массива } matrix.show(); // Показываем обновленное изображение на матрице delay(100); // Задерживаем выполнение на 100 миллисекунд } |
Описание программы:
Сначала в программе подключаем три библиотеки «Adafruit_NeoPixel», «Adafruit_NeoMatrix» и «Adafruit_GFX», а также подключаем поддержку русского шрифта.
1 2 3 4 |
#include <Adafruit_NeoPixel.h> #include <Adafruit_NeoMatrix.h> #include <Adafruit_GFX.h> #include "FontsRus/TimesNRCyr9.h" |
Затем указываем, к какому выводу платы подсоединена светодиодная лента.
1 |
#define PIN 6 |
Далее указываем габариты матрица 16×16 пикселей
1 |
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(16, 16, PIN, NEO_MATRIX_BOTTOM + NEO_MATRIX_RIGHT + NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG,NEO_GRB + NEO_KHZ800); |
Создаем массив трех основных цветов
1 2 3 4 |
const uint16_t colors[] = { matrix.Color(255, 0, 0), matrix.Color(0, 255, 0), matrix.Color(0, 0, 255) |
Потом запускаем матрицу командой begin(), предотвращаем автоматический перенос строк, применяя метод setTextWrap(false). Устанавливаем уровень яркости светодиодов равным 10 (при максимальном значении 255). Изначально цвет отображаемого текста задан красным.
1 2 3 4 |
matrix.begin(); matrix.setTextWrap(false); matrix.setBrightness(10); matrix.setTextColor(colors[0]); |
В основном цикле программы сначала выполняется очистка экрана командой fillScreen(0). Затем положение курсора обновляется таким образом, что координата X плавно уменьшается. После этого устанавливается русский шрифт TimesNRCyr9pt8b и осуществляется вывод текста методом print().
1 2 3 4 |
matrix.fillScreen(0); matrix.setCursor(x, 13); matrix.setFont(&TimesNRCyr9pt8b); matrix.print(F("ПРИВЕТ RobotChip")); |
Затем медленно уменьшаем значение координаты X, перемещая текст по экрану. Когда позиция достигает значения −300, цикл начинается заново, при этом меняется цвет текста. Если текст не помещается целиком на экране, следует увеличить порог возврата. В случае излишней задержки вывода, наоборот, уменьшите это значение.
1 2 3 4 5 |
if(--x < -300) { x = matrix.width(); if(++pass >= 3) pass = 0; matrix.setTextColor(colors[pass]); } |
Завершается цикл обновлением дисплея с помощью команды show() и добавлением небольшой задержки длительностью 100 миллисекунд (delay(100)), обеспечивающей плавность анимации.
1 2 |
matrix.show(); delay(100); |
