Бегущая строка на 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
#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», а также подключаем поддержку русского шрифта.
#include <Adafruit_NeoPixel.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_GFX.h>
#include "FontsRus/TimesNRCyr9.h"
Затем указываем, к какому выводу платы подсоединена светодиодная лента.
#define PIN 6
Далее указываем габариты матрица 16×16 пикселей
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(16, 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)
Потом запускаем матрицу командой begin(), предотвращаем автоматический перенос строк, применяя метод setTextWrap(false). Устанавливаем уровень яркости светодиодов равным 10 (при максимальном значении 255). Изначально цвет отображаемого текста задан красным.
matrix.begin();
matrix.setTextWrap(false);
matrix.setBrightness(10);
matrix.setTextColor(colors[0]);
В основном цикле программы сначала выполняется очистка экрана командой fillScreen(0). Затем положение курсора обновляется таким образом, что координата X плавно уменьшается. После этого устанавливается русский шрифт TimesNRCyr9pt8b и осуществляется вывод текста методом print().
matrix.fillScreen(0);
matrix.setCursor(x, 13);
matrix.setFont(&TimesNRCyr9pt8b);
matrix.print(F("ПРИВЕТ RobotChip"));
Затем медленно уменьшаем значение координаты X, перемещая текст по экрану. Когда позиция достигает значения −300, цикл начинается заново, при этом меняется цвет текста. Если текст не помещается целиком на экране, следует увеличить порог возврата. В случае излишней задержки вывода, наоборот, уменьшите это значение.
if(--x < -300) {
x = matrix.width();
if(++pass >= 3) pass = 0;
matrix.setTextColor(colors[pass]);
}
Завершается цикл обновлением дисплея с помощью команды show() и добавлением небольшой задержки длительностью 100 миллисекунд ( delay(100)), обеспечивающей плавность анимации.
matrix.show();
delay(100);
