Матрица 8×8 на MAX7219 и Arduino: подключение, библиотека LedControl, бегущая строка
MAX7219 — драйвер, который берёт на себя 64 светодиода матрицы, а Arduino отдаёт всего три сигнальных провода. Точки зажигаются командой «строка, столбец, вкл», яркость регулируется шестнадцатью ступенями, и ничего не мерцает: развёртку делает микросхема.
Модули соединяются в цепочку: выход одного в вход следующего, и те же три провода управляют четырьмя, восемью, шестнадцатью матрицами. Так делают бегущую строку и большие часы.
Схема подключения
Распиновка
| Провод | Куда и зачем |
|---|---|
| VCC | 5 В. |
| GND | Земля. |
| DIN | Вход данных. |
| CS (LOAD) | Защёлка. |
| CLK | Такт. |
| DOUT | Выход данных на следующий модуль в цепочке. На пятиконтактной гребёнке справа. |
Характеристики
- Драйвер
- MAX7219, 64 светодиода
- Яркость
- 16 ступеней
- Питание
- 4–5,5 В
- Ток
- до 330 мА на полной яркости
- Интерфейс
- SPI-подобный, 3 провода
- Цепочка
- до 8 модулей на одной библиотеке LedControl
Одна матрица или бегущая строка
Для одной матрицы хватает LedControl: зажечь точку, вывести строку байтов, выставить яркость. Рисунок задаётся восемью байтами — по байту на строку, единица в бите зажигает точку. Удобно рисовать в онлайн-редакторах вроде xantorohara.github.io/led-matrix-editor, они выдают готовый массив.
Для текста и нескольких матриц берут MD_MAX72XX с надстройкой MD_Parola: там шрифты, прокрутка и эффекты. Обратите внимание на тип модуля в её настройках — FC16 для синих квадратных модулей из наборов; при неправильном типе текст выводится зеркально или по столбцам.
Библиотека
LedControl— Для одной матрицы. Для текста и цепочек — MD_MAX72XX и MD_Parola.
Готовый скетч
#include <LedControl.h>
// DIN, CLK, CS, число модулей
LedControl lc = LedControl(11, 13, 10, 1);
// Улыбка: восемь строк, единица — горящая точка
const byte SMILE[8] = {
B00111100,
B01000010,
B10100101,
B10000001,
B10100101,
B10011001,
B01000010,
B00111100
};
void setup() {
lc.shutdown(0, false); // выйти из спящего режима
lc.setIntensity(0, 4); // яркость 0..15
lc.clearDisplay(0);
}
void loop() {
for (int row = 0; row < 8; row++) {
lc.setRow(0, row, SMILE[row]);
}
delay(2000);
lc.clearDisplay(0);
delay(500);
}Скетч собирается arduino-cli под Arduino UNO
Первым параметром в каждой функции идёт номер модуля в цепочке: 0 — ближайший к Arduino.
Частые ошибки
Матрица не горит вовсе
Драйвер стартует в спящем режиме. Без lc.shutdown(0, false) он не покажет ничего.
Рисунок повёрнут или зеркален
Зависит от того, как впаяна матрица в модуль, а на дешёвых модулях — как попало. Поверните массив байтов в коде или переверните матрицу в панельках: она вставная.
Мерцает, плата перезагружается
Ток. На полной яркости матрица берёт треть ампера. Снизьте яркость setIntensity или дайте отдельное питание 5 В.
Работает первая матрица в цепочке, остальные тёмные
Число модулей в конструкторе LedControl не совпадает с реальным. Или DOUT первой не соединён с DIN второй.
Текст в MD_Parola идёт по столбцам
Неверный тип модуля в настройках библиотеки. Для квадратных синих — FC16_HW, для длинных зелёных — GENERIC_HW или PAROLA_HW.
Что понадобится
- Модуль матрицы 8×8 на MAX7219
- Arduino UNO
- Провода «папа-мама»
- Для бегущей строки — модуль на четыре матрицы и блок питания 5 В