ELECTRONICS

Библиотека LedControl

менеджер: LedControlEberhard Fahleверсия 1.0.6

Матрицы 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 второго.

Где используется на сайте

Что дальше