Библиотека LedControl
Матрицы 8×8 и семисегментные индикаторы на MAX7219: до восьми модулей в цепочке на трёх проводах.
MAX7219 управляет 64 светодиодами — матрицей 8×8 или восемью семисегментными разрядами — и получает данные по трём проводам: DIN, CLK, CS. Модули соединяются в цепочку, и библиотека адресует их по номеру: первый — 0, следующий — 1.
Библиотека простая: точка, строка, столбец, цифра или символ. Бегущие строки и шрифты в ней не заложены — их пишут сами или берут библиотеки вроде MD_Parola.
Установка и подключение
В менеджере библиотек ищите LedControl автора Eberhard Fahle. Если менеджер предложит поставить зависимости — соглашайтесь. Как открыть менеджер и что делать, если библиотека не находится, — в общей статье про библиотеки.
#include <LedControl.h>Создание объекта — обычно до setup():
LedControl lc(12, 11, 10, 1); // DIN, CLK, CS, сколько модулей
lc.shutdown(0, false); // в setup(): разбудить модуль 0
lc.setIntensity(0, 8); // яркость 0–15
lc.clearDisplay(0);Методы
Только то, что нужно в обычном скетче. Сигнатуры сверены с версией 1.0.6.
shutdown(int addr, bool off)- Спящий режим модуля; после включения он спит — обязательно shutdown(addr, false).
setIntensity(int addr, int level)- Яркость 0–15.
clearDisplay(int addr)- Погасить модуль.
setLed(int addr, int row, int col, bool on)- Одна точка матрицы: строка и столбец 0–7.
setRow(int addr, int row, byte value)- Строка целиком байтом: биты — столбцы.
setColumn(int addr, int col, byte value)- Столбец целиком.
setDigit(int addr, int digit, byte value, bool dp)- Цифра 0–15 в разряде семисегментного индикатора; dp — точка.
setChar(int addr, int digit, char value, bool dp)- Символ из ограниченного набора: цифры, A–F, H, L, P, минус, пробел.
getDeviceCount()- Сколько модулей задано в конструкторе.
Пример
#include <LedControl.h>
LedControl lc(12, 11, 10, 1); // DIN, CLK, CS, один модуль
// смайлик 8×8: каждый байт — строка, биты — столбцы
const byte smile[8] = {
0b00111100,
0b01000010,
0b10100101,
0b10000001,
0b10100101,
0b10011001,
0b01000010,
0b00111100
};
void setup() {
lc.shutdown(0, false);
lc.setIntensity(0, 6);
lc.clearDisplay(0);
for (int r = 0; r < 8; r++) lc.setRow(0, r, smile[r]);
}
void loop() {}Если картинка повёрнута или отзеркалена — это нормально: модули паяют по-разному. Меняйте setRow на setColumn или разворачивайте байты.
На чём попадаются
Матрица не светится
Модуль спит после включения. shutdown(addr, false) — первая команда в setup().
Тусклая и глючит при полном заполнении
MAX7219 на всех 64 точках берёт до 300 мА с модуля. Питание от 5V платы тянет один модуль; цепочку питают отдельно.
Второй модуль в цепочке не работает
В конструкторе указано число модулей 1. И DOUT первого должен идти в DIN второго.