Text Scroll на Arduino
В этом проекте мы рассмотрим, как создать устройство на базе Arduino, которое будет прокручивать текст на светодиодной матрице 8x8. Мы будем использовать библиотеку AlashLEDMatrix8x8 для управления матрицей. Этот проект подойдет как для начинающих, так и для более опытных пользователей Arduino, так как включает основные понятия работы с матрицами и библиотеки для Arduino.
1. Необходимые компоненты
Arduino Uno / Nano / Mega
Светодиодная матрица 8x8 MAX7219 (4 сегмента)
Соединительные провода
2. Подключение компонентов
Подключение матрицы MAX7219:
VCC -> 5V на Arduino
GND -> GND на Arduino
DIN -> D11 на Arduino
CS -> D9 на Arduino
CLK -> D13 на Arduino
3. Установка библиотеки
Чтобы подключить библиотеку AlashLEDMatrix8x8 для Arduino, выполните следующие шаги:
Скачайте библиотеку с репозитория GitHub:
Откройте Arduino IDE и перейдите в меню «Скетч» → «Подключить библиотеку» → «Добавить .ZIP библиотеку…».
В открывшемся окне выберите скачанный .zip файл и нажмите «Открыть».
После установки библиотека будет доступна для использования в ваших проектах.
4. Программный код
Ниже представлен полный код для управления светодиодной матрицей 8x8 и прокрутки текста:
#include <AlashLEDMatrix8x8.hpp>
const uint8_t CHIP_SELECT_PIN = 9;
const int MATRIX_SEGMENTS = 4;
const int MATRIX_WIDTH = MATRIX_SEGMENTS * 8;
AlashLEDMatrix8x8 ledMatrix(MATRIX_SEGMENTS, CHIP_SELECT_PIN);
char text[] = "ALASH ELECTRONICS";
const int ANIM_DELAY = 35;
//#define L2R
#define R2L
void setup() {
ledMatrix.setEnabled(true);
ledMatrix.setIntensity(2);
}
int currentX = 0, currentY = 0;
byte font[95][8] = { {0,0,0,0,0,0,0,0}, // SPACE
{0x10,0x18,0x18,0x18,0x18,0x00,0x18,0x18}, // EXCL
{0x28,0x28,0x08,0x00,0x00,0x00,0x00,0x00}, // QUOT
{0x00,0x0a,0x7f,0x14,0x28,0xfe,0x50,0x00}, // #
{0x10,0x38,0x54,0x70,0x1c,0x54,0x38,0x10}, // $
{0x00,0x60,0x66,0x08,0x10,0x66,0x06,0x00}, // %
{0,0,0,0,0,0,0,0}, // &
{0x00,0x10,0x18,0x18,0x08,0x00,0x00,0x00}, // '
{0x02,0x04,0x08,0x08,0x08,0x08,0x08,0x04}, // (
{0x40,0x20,0x10,0x10,0x10,0x10,0x10,0x20}, // )
{0x00,0x10,0x54,0x38,0x10,0x38,0x54,0x10}, // *
{0x00,0x08,0x08,0x08,0x7f,0x08,0x08,0x08}, // +
{0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x08}, // COMMA
{0x00,0x00,0x00,0x00,0x7e,0x00,0x00,0x00}, // -
{0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06}, // DOT
{0x00,0x04,0x04,0x08,0x10,0x20,0x40,0x40}, // /
{0x00,0x38,0x44,0x4c,0x54,0x64,0x44,0x38}, // 0
{0x04,0x0c,0x14,0x24,0x04,0x04,0x04,0x04}, // 1
{0x00,0x30,0x48,0x04,0x04,0x38,0x40,0x7c}, // 2
{0x00,0x38,0x04,0x04,0x18,0x04,0x44,0x38}, // 3
{0x00,0x04,0x0c,0x14,0x24,0x7e,0x04,0x04}, // 4
{0x00,0x7c,0x40,0x40,0x78,0x04,0x04,0x38}, // 5
{0x00,0x38,0x40,0x40,0x78,0x44,0x44,0x38}, // 6
{0x00,0x7c,0x04,0x04,0x08,0x08,0x10,0x10}, // 7
{0x00,0x3c,0x44,0x44,0x38,0x44,0x44,0x78}, // 8
{0x00,0x38,0x44,0x44,0x3c,0x04,0x04,0x78}, // 9
{0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x00}, // :
{0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x08}, // ;
{0x00,0x10,0x20,0x40,0x80,0x40,0x20,0x10}, // <
{0x00,0x00,0x7e,0x00,0x00,0xfc,0x00,0x00}, // =
{0x00,0x08,0x04,0x02,0x01,0x02,0x04,0x08}, // >
{0x00,0x38,0x44,0x04,0x08,0x10,0x00,0x10}, // ?
{0x00,0x30,0x48,0xba,0xba,0x84,0x78,0x00}, // @
{0x00,0x1c,0x22,0x42,0x42,0x7e,0x42,0x42}, // A
{0x00,0x78,0x44,0x44,0x78,0x44,0x44,0x7c}, // B
{0x00,0x3c,0x44,0x40,0x40,0x40,0x44,0x7c}, // C
{0x00,0x7c,0x42,0x42,0x42,0x42,0x44,0x78}, // D
{0x00,0x78,0x40,0x40,0x70,0x40,0x40,0x7c}, // E
{0x00,0x7c,0x40,0x40,0x78,0x40,0x40,0x40}, // F
{0x00,0x3c,0x40,0x40,0x5c,0x44,0x44,0x78}, // G
{0x00,0x42,0x42,0x42,0x7e,0x42,0x42,0x42}, // H
{0x00,0x7c,0x10,0x10,0x10,0x10,0x10,0x7e}, // I
{0x00,0x7e,0x02,0x02,0x02,0x02,0x04,0x38}, // J
{0x00,0x44,0x48,0x50,0x60,0x50,0x48,0x44}, // K
{0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x7c}, // L
{0x00,0x82,0xc6,0xaa,0x92,0x82,0x82,0x82}, // M
{0x00,0x42,0x42,0x62,0x52,0x4a,0x46,0x42}, // N
{0x00,0x3c,0x42,0x42,0x42,0x42,0x44,0x38}, // O
{0x00,0x78,0x44,0x44,0x48,0x70,0x40,0x40}, // P
{0x00,0x3c,0x42,0x42,0x52,0x4a,0x44,0x3a}, // Q
{0x00,0x78,0x44,0x44,0x78,0x50,0x48,0x44}, // R
{0x00,0x38,0x40,0x40,0x38,0x04,0x04,0x78}, // S
{0x00,0x7e,0x90,0x10,0x10,0x10,0x10,0x10}, // T
{0x00,0x42,0x42,0x42,0x42,0x42,0x42,0x3e}, // U
{0x00,0x42,0x42,0x42,0x42,0x44,0x28,0x10}, // V
{0x80,0x82,0x82,0x92,0x92,0x92,0x94,0x78}, // W
{0x00,0x42,0x42,0x24,0x18,0x24,0x42,0x42}, // X
{0x00,0x44,0x44,0x28,0x10,0x10,0x10,0x10}, // Y
{0x00,0x7c,0x04,0x08,0x7c,0x20,0x40,0xfe}, // Z
// (the font does not contain any lower case letters. you can add your own.)
// {}, //
};
void loop() {
int len = strlen(text);
drawString(text, len, currentX, 0);
ledMatrix.display();
delay(ANIM_DELAY);
#ifdef R2L
if (--currentX < len * -8) {
currentX = MATRIX_WIDTH;
}
#endif
}
void drawString(char* text, int len, int x, int y) {
for (int idx = 0; idx < len; idx++) {
int c = text[idx] - 32;
if (x + idx * 8 > MATRIX_WIDTH) return;
if (8 + x + idx * 8 > 0) {
drawSprite(font[c], x + idx * 8, y, 8, 8);
}
}
}
void drawSprite(byte* sprite, int x, int y, int width, int height) {
byte mask = B10000000;
for (int iy = 0; iy < height; iy++) {
for (int ix = 0; ix < width; ix++) {
ledMatrix.setPixel(x + ix, y + iy, (bool)(sprite[iy] & mask));
mask = mask >> 1;
}
mask = B10000000;
}
}
5. Заключение
Проект Text Scroll на Arduino демонстрирует, как можно использовать светодиодную матрицу 8x8 MAX7219 для отображения прокручивающегося текста. С помощью библиотеки AlashLEDMatrix8x8, которую легко интегрировать и использовать, мы можем создать динамические визуальные эффекты на дисплее.
Основные достижения проекта:
Инициализация матрицы: Мы настроили и инициализировали матрицу, установив яркость и включив дисплей.
Прокрутка текста: Реализована функция прокрутки текста, позволяющая пользователю отображать любой текст, прокручивающийся в любом направлении.
Масштабируемость: Код легко адаптируется для работы с большим количеством сегментов.
Использование шрифтов и спрайтов: В проекте используется шрифт, определённый в массиве, который можно легко изменить.
Применение проекта:
Информационные табло: на вокзалах, автобусных остановках
Декоративные элементы: рекламные вывески, праздничные надписи
Образовательные проекты: обучение Arduino, работа с матрицами
Проект подходит как для новичков, так и для опытных разработчиков, желающих расширить навыки в программировании и работе с аппаратным обеспечением.