Матричный дисплей 8х8 arduino matrix ардуино урок. Элементы управления и меню

Матричный дисплей - устройство состоящее из LED матрицы 8x8 и платы управления на базе микросхемы MAX7219 c минимальной необходимой обвязкой. На фото вы уже видети готовое устройство, но мне оно пришло по почте вот в таком виде, так что пришлось взять в руки паяльник и спаять всё в нужном виде.

Базовое подключение к плате Arduino Nano показано на принципиальной схеме.

Как видно из схемы - всё просто, нужно лишь соединить проводами контакты обеих плат в следующем порядке:

Arduino Nano Matrix 8x8
PIN 12 PIN DIN
PIN 11 PIN CLK
PIN 10 PIN CS
PIN 5V PIN 5V
PIN GND PIN GND

Итак, наконец-то пришло время поработать с кодом, и для того чтобы запустить LED матрицу, нужно скачать и установить библиотеку LedControl. Библиотека поддерживает работу с микросхемами MAXIM 7221 и 7219. LED матрица в качестве драйвера использует MAX7219, это то что нам нужно. Я думаю что нужно начать с небольшого скетча, демонстрирующего базовые функции данной библиотеки. В скетче, для включения/ выключения светодиодов использована функция setRow(). Синтаксис вызова функции setRow():

matrix.setRow(0, row, col, set);

Где matrix - объект класса LedControl

0 - адрес устройства на шине SPI, в данном случае устройство одно, и нумерация начинается с нулевого адреса

row - ряд(Возможные значения от 0 до 7)

col - колонка(Возможные значения от 0 до 7)

set - значение установки(true - включить, false - выключить)

matrix.setRow(0, 1, 4, true)

Включить на матрице светодиод, находящийся в 1-м ряду и в 4-м столбце.

Еще пример:

int x = 1;

int y = 4;

matrix.setRow(0, x, y, true);

matrix.setRow(0, x, y, false);

То же самое только с использованием переменных, и последующим выключением зажженного светодиода по заданным координатам. Итак, в скетче проигрывается несколько анимаций, с использованием функции setRow().

#include "LedControl.h" //Синтаксис создания класса LedControl(dataPin,clockPin,csPin,numDevices) //Где LedControl - объект класса //dataPin - пин на плате Arduino к которому будет подключен пин DIN //clockPin - пин на плате Arduino к которому будет подключен пин CLK //csPin - пин на плате Arduino к которому будет подключен пин CS //numDevices - количество устройств на шине //Создать объект класса matrix в нашем случае с одним подключенным устройством LedControl matrix = LedControl(12, 11, 10, 1); //Время задержки включения/выключения светодиода на матрице const int delayValue = 100; //Прототипы функций //Последовательное включение/выключение void PointSerialSet(); //Змейка справа - налево void PointRigthToLeft(); //Змейка снизу - вверх void PointDownToUp(); //Змейка слева - направо void PointLeftToRigth(); //Змейка сверху - вниз void PointUpToDown(); //Эффект - затухающий импульс void PointFading(); //Эффект - импульс void PointPulse(); //Эффект - нарастающий импульс void PointClimbing(); //Эффект закручивание спирали внутрь void PointToSpiralIn(); //Эффект раскручивание спирали наружу void PointToSpiralOut(); void setup() { //Устройству с адресом 0 выйти из спящего режима по умолчанию matrix.shutdown(0, false); //Установить яркость Led матрицы на 8 //Возможные значения от 0 до 15 matrix.setIntensity(0, 8); //Очистить дисплей matrix.clearDisplay(0); } void loop() { //Вызываем функции поочередно PointSerialSet(); PointRigthToLeft(); PointDownToUp(); PointLeftToRigth(); PointUpToDown(); PointFading(); PointPulse(); PointClimbing(); PointToSpiralIn(); PointToSpiralOut(); } //Тела функций void PointSerialSet() { //Используем функцию setLed(address, row, col, set) //Последовательное включение по рядам for(int i = 0; i < 8; i ++) { for(int j = 0; j < 8; j ++) { //Включить светодиод matrix.setLed(0, i, j, true); delay(delayValue); //Выключить светодиод matrix.setLed(0, i, j, false); } } } void PointRigthToLeft() { //Используем функцию setLed(address, row, col, set) //Змейка справа - налево for(int i = 7; i >= 0; i --) { for(int j = 7, n = 0; j >= 0, n < 8; j --, n ++) { if((i % 2) > 0) { matrix.setLed(0, j, i, true); delay(delayValue); matrix.setLed(0, j, i, false); } else { matrix.setLed(0, n, i, true); delay(delayValue); matrix.setLed(0, n, i, false); } } } } void PointDownToUp() { //Используем функцию setLed(address, row, col, set) //Змейка снизу - вверх for(int i = 7; i >= 0; i --) { for(int j = 7, n = 0; j >= 0, n < 8; j --, n ++) { if((i % 2) > 0) { matrix.setLed(0, i, n, true); delay(delayValue); matrix.setLed(0, i, n, false); } else { matrix.setLed(0, i, j, true); delay(delayValue); matrix.setLed(0, i, j, false); } } } } void PointLeftToRigth() { //Используем функцию setLed(address, row, col, set) //Змейка слева - направо for(int i = 0; i < 8; i ++) { for(int j = 7, n = 0; j >= 0, n < 8; j --, n ++) { if((i % 2) > 0) { matrix.setLed(0, j, i, true); delay(delayValue); matrix.setLed(0, j, i, false); } else { matrix.setLed(0, n, i, true); delay(delayValue); matrix.setLed(0, n, i, false); } } } } void PointUpToDown() { //Используем функцию setLed(address, row, col, set) //Змейка сверху - вниз for(int i = 0; i < 8; i ++) { for(int j = 7, n = 0; j >= 0, n < 8; j --, n ++) { if((i % 2) > 0) { matrix.setLed(0, i, n, true); delay(delayValue); matrix.setLed(0, i, n, false); } else { matrix.setLed(0, i, j, true); delay(delayValue); matrix.setLed(0, i, j, false); } } } } void PointFading() { //Используем функцию setLed(address, row, col, set) //Эффект затухания int upValue = 0; int downValue = 7; for(int i = 0; i < 8; i ++) { if(i % 2) { for(int n = downValue; n >= upValue; n --) { matrix.setLed(0, n, i, true); delay(delayValue); matrix.setLed(0, n, i, false); } downValue --; } else { for(int j = upValue; j < downValue + 1; j ++) { matrix.setLed(0, j, i, true); delay(delayValue); matrix.setLed(0, j, i, false); } upValue ++; } } } void PointClimbing() { //Используем функцию setLed(address, row, col, set) //Эффект затухания int upValue = 4; int downValue = 4; for(int i = 0; i < 8; i ++) { if(i % 2) { for(int n = downValue; n >= upValue; n --) { matrix.setLed(0, n, i, true); delay(delayValue); matrix.setLed(0, n, i, false); } downValue ++; } else { for(int j = upValue; j < downValue + 1; j ++) { matrix.setLed(0, j, i, true); delay(delayValue); matrix.setLed(0, j, i, false); } upValue --; } } } void PointPulse() { //Используем функцию setLed(address, row, col, set) //Эффект пульса for(int i = 0; i < 8; i ++) { if(i == 4) { for(int climb = i; climb >= 0; climb --) { matrix.setLed(0, climb, i, true); delay(delayValue / 4); matrix.setLed(0, climb, i, false); } for(int fade = 1; fade < 8; fade ++) { matrix.setLed(0, fade, i, true); delay(delayValue / 4); matrix.setLed(0, fade, i, false); } } else { matrix.setLed(0, 4, i, true); delay(delayValue); matrix.setLed(0, 4, i, false); } } } void PointToSpiralIn() { //Используем функцию setLed(address, row, col, set) //Эффект спирали внутрь int lengthX = 8; // Ширина матрицы int lengthY = 8; // Высота матрицы int pointX = 0; int pointY = 0; int dir = 0; // Направление (0 - вправо, 1 - вниз, 2 - влево, 3 - вверх) int offset = 0; // Смещение // Перебираем всю матрицу for (int i = 0; i < lengthX * lengthY; i++) { matrix.setLed(0, pointY, pointX, true); delay(delayValue); matrix.setLed(0, pointY, pointX, false); if(dir == 0) { pointX ++; if(pointX >= lengthX - 1 - offset) { dir = 1; } continue; } if(dir == 1) { pointY ++; if(pointY > <= offset) { dir = 3; } continue; } if(dir == 3) { pointY --; if(pointY <= offset + 1) { dir = 0; offset ++; pointY = offset; } continue; } } } void PointToSpiralOut() { //Используем функцию setLed(address, row, col, set) //Эффект спирали внаружу int lengthX = 8; // Ширина матрицы int lengthY = 8; // Высота матрицы int pointX = 3; //начать с этих координат int pointY = 3; //начать с этих координат int dir = 0; // Направление (0 - вправо, 1 - вниз, 2 - влево, 3 - вверх) int offset = 3; // Смещение // Перебираем всю матрицу for (int i = 0; i < lengthX * lengthY; i++) { matrix.setLed(0, pointY, pointX, true); delay(delayValue); matrix.setLed(0, pointY, pointX, false); if(dir == 0) { pointX ++; if(pointX >= lengthX - 1 - offset) { dir = 1; } continue; } if(dir == 1) { pointY ++; if(pointY >= lengthY - 1 - offset) { dir = 2; } continue; } if(dir == 2) { pointX --; if(pointX <= offset - 1) { dir = 3; } continue; } if(dir == 3) { pointY --; if(pointY <= offset - 1) { dir = 0; offset --; pointY = offset; } continue; } } }

Видео работы скетча:


Пожалуйста, включите javascript для работы комментариев.

На предыдущих уроках мы научились при помощи сдвигового регистра. Это оказалось немного сложнее, чем напрямую с выводов общего назначения. Проблема, которую нам тогда предстояло решить, заключалась в ограниченном количестве управляемых выводов у контроллера Ардуино. Апогеем же наших изысканий стало использование динамической индикации для . Теперь пришло время еще немного усложнить задачу: учимся работать со светодиодной матрицей.

1. Матричный индикатор

Как мы уже знаем, сегментные индикаторы, будь то шкалы или цифры, состоят из отдельных светодиодов, соединенных вместе. Например, у группы светодиодов могут быть соединены все катоды. Такой индикатор имеет приписку «с общим катодом», в противном случае — «с общим анодом». А что будет, если мы разместим светодиоды не в виде цифры или шкалы, а в виде сетки? Получится уже вполне себе графический индикатор. То есть такой, на котором можно отобразить не только число, но и какое-то изображение. Такая сетка называется матричным индикатором, а в случае использования светодиодов — светодиодной матрицей. Разрешение матричного индикатора — это количество точек по горизонтали и вертикали. Например, самые распространенные индикаторы имеют разрешение 8×8 точек. Если требуется светодиодная матрица с большим разрешением, то её просто-напросто составляют из нескольких 8×8 индикаторов. Как это делать, мы увидим позже. А пока разберемся как соединяются все 64 светодиода внутри матрицы. Конечно, можно бы было как и в случае семисегментного индикатора соединить все светодиоды общим катодом или анодом. В этом случае нам бы потребовалось либо 64 вывода контроллера, либо 8 сдвиговых регистров. Оба варианта весьма расточительны. Более правильный вариант — объединить светодиоды в группы по 8 штук с общим катодом. Пусть это будут столбцы матрицы. Затем, параллельные светодиоды в этих столбцах объединить снова в группы по 8 штук уже с общим анодом. Получится вот такая схема:
Предположим, стоит задача зажечь светодиод R6C3. Для этого нам потребуется подать высокий уровень сигнала на вывод R6, а вывод C3 соединить с землей. Не выключая эту точку, попробуем зажечь другую — R3C7. Положительный контакт питания соединим с R3 и землю с C7. Но в таком случае строки R6 и R3 будут пересекаться с колонками C3 и C7 не в двух, а в четырех местах! Следовательно и зажжется не две, а четыре точки. Проблема! Очевидно, что помочь сможет всё та же . Если мы будем включать точки R6C3 и R3C7 по-очереди очень быстро, то сможем использовать персистентность зрения — способность интерпретировать быстро сменяющиеся изображения как одно целое.

2. Светодиодная матрица и сдвиговые регистры

В нашем уроке мы будем подключать к Ардуино Уно самую простую светодиодную матрицу 8×8 красного свечения. Нумерация выводов начинается с нижнего левого угла. При этом, нумерация ног 1-16 не связана никакой логикой с нумерацией колонок и строк C и R.
Ориентируясь на урок про динамическую индикацию, попробуем использовать в схеме управления матричным индикатором 8-битные сдвиговые регистры. Один регистр подключим к выводам индикатора, отвечающим за колонки, а второй к выводам строк. Принципиальная схема
Важное замечание №1. Необходимо, чтобы резисторы в этой схеме были на линиях, идущих от первого сдвигового регистра. Этот сдвиговый регистр отвечает за колонки. При таком подключении, каждый резистор будет задавать ток только для одного светодиода на каждом шаге динамического алгоритма. Следовательно, все светодиоды будут светиться равномерно. Важное замечание №2. Указанная выше схема носит сугубо ознакомительный характер. Правильнее будет включить в разрыв между вторым регистром и матрицей дополнительную силовую микросхему, например транзисторную сборку ULN2003.

3. Программа

Чтобы было веселей, попробуем высветить на индикаторе смайлик. Как уже было сказано, для вывода изображения на матрицу воспользуемся динамической индикацией. А именно, будем высвечивать нашу картинку построчно. Сначала зажжем нужные колонки в самой верхней строке, затем во второй, в третьей, и так все 8 строк. За колонки у нас будет отвечать первый сдвиговый регистр, а за строки второй. Следовательно, вывод строки будет состоять из двух последовательных записей в регистр: сначала передаем код строки, затем код точек в этой строке. В этой программе мы также воспользуемся ускоренной версией функции digitalWrite. Это необходимо для того, чтобы процесс динамической индикации проходил очень быстро. В противном случае, мы увидим заметное мерцание матрицы. Исходный код const byte data_pin = PD2; const byte st_pin = PD3; const byte sh_pin = PD4; unsigned long tm, next_flick; const unsigned int to_flick = 500; byte line = 0; const byte data = { 0b00111100, 0b01000010, 0b10100101, 0b10000001, 0b10100101, 0b10011001, 0b01000010, 0b00111100 }; void latchOn(){ digitalWriteFast(st_pin, HIGH); digitalWriteFast(st_pin, LOW); } void fill(byte d){ for(char i=0; i<8; i++){ digitalWriteFast(sh_pin, LOW); digitalWriteFast(data_pin, d & (1< next_flick){ next_flick = tm + to_flick; line++; if(line == 8) line = 0; // передаем код строки fill(~(1<<(7-line))); // зажигаем точки в строке № line fill(data); // открываем защелку latchOn(); } } Основная часть этой программы, включая переменные data_pin, sh_pin, st_pin, next_flick, to_flick и функцию fill уже известны нам из уроков про и про . Массив data хранит восемь строк нашей картинки. Для экономии памяти мы записали каждую комбинацию точек в бинарном виде. Функция latchOn открывает защелку регистра. Это нужно делать только после заполнения обоих сдвиговых регистров. После загрузки программы на Ардуино, на индикаторе появится смайл.

4. Анимация на светодиодной матрице

А теперь доработаем программу таким образом, чтобы изображение на индикаторе менялось каждые пол секунды. Для этого вспомним еще раз . const byte data_pin = PD2; const byte st_pin = PD3; const byte sh_pin = PD4; unsigned long tm, next_flick, next_switch; const unsigned int to_flick = 500; const unsigned long to_switch = 500000; byte line = 0; byte frame = 0; const byte data = { { 0b00111100, 0b01000010, 0b10100101, 0b10000001, 0b10100101, 0b10011001, 0b01000010, 0b00111100 }, { 0b00111100, 0b01000010, 0b10100101, 0b10000001, 0b10000001, 0b10111101, 0b01000010, 0b00111100 }}; void latchOn(){ digitalWriteFast(st_pin, HIGH); digitalWriteFast(st_pin, LOW); } void fill(byte d){ for(char i=0; i<8; i++){ digitalWriteFast(sh_pin, LOW); digitalWriteFast(data_pin, d & (1< next_flick){ next_flick = tm + to_flick; line++; if(line == 8) line = 0; fill(~(1<<(7-line))); fill(data); latchOn(); } tm = micros(); if(tm > next_switch){ next_switch = tm + to_switch; frame = !frame; } } Загружаем программу на Ардуино и наблюдаем результат.

5. Масштабирование светодиодной матрицы

Светодиодная матрица с разрешением 8×8 подойдет для отображения двух цифр или простого символа. Если требуется вывести на индикатор какое-то более или менее полезное изображение, необходимо объединить матрицы. Делается это с помощью добавления новых сдвиговых регистров как по вертикали, так и по горизонтали. Следует отметить, что быстродействия контроллера Ардуино Уно в связке со сдвиговыми регистрами хватит разве что на дисплей 16×16. Дальнейшее увеличение размеров светодиодного дисплея приведет к появлению заметного мерцания.

Задания

  • Гипноз. Запрограммировать контроллер таким образом, чтобы на светодиодной матрице с периодом в 1 секунду появлялись концентрические окружности с постоянно увеличивающимся радиусом.
  • Игра змейка. Реализовать на светодиодной матрице 8×8 такую известную игру, как змейка. В схему необходимо добавить четыре кнопки для управления направлением движения, а также зуммер для сигнализации события съедания яблок (или что там ест змея…).
  • Электронный уровень. Добавить в схему акселерометр. Написать программу, которая будет отображать на светодиодной матрице точку, координаты которой зависят от наклона всего устройства. Например, когда устройство зафиксировано параллельно земле (перпендикулярно вектору гравитации), то точка находится в центре. При наклоне электронного уровня влево, точка пропорционально смещается право.

Заключение

Собрав схему управления матрицей, у многих может возникнуть вопрос: «Ну неужели за 30 лет никто не придумал более простого способа работы с матрицей?» На самом деле, придумали. Существуют специализированные микросхемы для работы с разными типами дисплеев, в том числе и для работы со светодиодной матрицей. В одном из следующих уроков мы научимся управлять индикатором с помощью микросхемы MAX7219. Такой способ позволит нам легко объединять несколько матриц с один большой дисплей, без необходимости сильно усложнять электрическую схему.

Наконец доехали из поднебесной матричные модули. Каждый модуль состоит из микросхемы MAX7219 (), светодиодной матрицы, в обвязке стоят один конденсатор и один резистор.


Управляется MAX7219 по интерфейсу SPI.


Микросхемы в кластере соединены последовательно. Читал в интернете, что максимально возможное последовательное подключение допускает всего 8 штук MAX7219. Не верьте. 16 модулей соединил, и все прекрасно работает.

Модули, представленные на Али, бывают в нескольких вариантах исполнения. Наибольшей популярностью пользуются 2 вида: с микросхемой в DIP и в SOIC корпусах. Модуль с DIP-микросхемой большего размера и не так удобен при соединении в кластер. Соединять придется кучей проводов.


Модули с микросхемой в SOIC-корпусе имеют размер светодиодной матрицы и соединяются пайкой или джамперами. Получается красиво и аккуратно.


Наиболее известными библиотеками для работы с матрицами и кластерами являются MAX72xx Panel от Марка Райса и Parola от MajicDesigns : первая библиотека проще в использовании, вторая посложнее с бОльшими возможностями. Распишу подробнее.

MAX72xx Panel

При использовании MAX72xx Panel обязательна установка библиотеки Adafruit GFX .

Для русификации текста необходимо будет скачать ЭТОТ ФАЙЛ и заменить стандартный файл glcdfont.c в каталоге Arduino/Libraries/Adafruit-GFX-Library-master. Также в этом файле описаны, кроме нужных букв и цифр, куча всяких символов. Далеко не все они могут пригодиться. Картинка ниже поясняет как формируются символы.

При необходимости Вы можете создать свои символы и заменить ими любые неиспользуемые в файле. Практически все точечные шрифты, используемые в различных библиотеках, сформированы подобным образом.

Итак, библиотеки MAX72xx Panel и Adafruit GFX установлены, файл glcdfont.c заменен. Запускаем Arduino IDE, открываем ФАЙЛ . В скетче есть функция utf8rus. Она обеспечивает перекодировку таблицы символов для русского языка. Она нужна только для нормального вывода из программы, то есть в программе нужный текст пишется на русском. Если текст вводится через СОМ-порт, то коррекция кодов символа происходит в функции Serial_Read. В IDE и в консоли разработчики использовали разные кодировки.

В начале файла присутствуют строки необходимые для работы библиотеки.

int numberOfHorizontalDisplays = 1;

int numberOfVerticalDisplays = 16;

У меня модули с микросхемой в SOIC-корпусе. У них есть небольшая особенность. Матрица у модулей установлена повернутой на 90 градусов. Это плата за удобство соединения. Если запустить скетчи, идущие в комплекте с библиотеками, они будут выводить текст снизу вверх в каждом модуле. Текст будет выводится зигзагами. Для лечения этого недуга библиотеке надо "сказать", что вертикальных дисплеев 16 (физически они расположены горизонтально). И потом в void Setup указать библиотеке строку

matrix.setRotation(matrix.getRotation() + 1);

Она программно перевернет каждую матрицу. И отображаться все будет нормально.

У модулей с DIP-корпусом микросхем такого нет. Там все красиво, кроме кучи проводов.

Библиотека MAX72xx Panel довольно скромная. Визуальных эффектов вывода нет. Кластер воспринимается как одно целое. Намного лучше дела обстоят с MD Parola.

Parola от MajicDesigns.

Обладатели модулей с микросхемой в SOIC-корпусе также столкнутся с проблемой ориентации модулей в кластере. Только выглядит это немного по-другому нежели в MAX72xx. Здесь модули окажутся как бы не в своей очереди.


Скетч HelloWorld из образцов в комплекте с библиотекой.

Программно в скетче мне не удалось вылечить этот недуг. Я вылечил его по-другому. В файле Adruino/libraries/MD_MAX72xx_lib.h в конце нужно найти строки как на картинке.


И исправить в выделенной строке выделенную 1 на 0. Сохранить файл. Arduino IDE можно не перезагружать. Заливаем, смотрим.


Теперь можно использовать 24 эффекта анимации. Анимация запускается командой P.displayText(«Текст для вывода», «выравнивание текста», скорость, задержка показа, эффект появления, эффект исчезновения). Как видите, настроек достаточно много.

И самый смак - деление кластера на виртуальные зоны. С зонами работать не очень сложно. Скетч не выкладываю, он есть в образцах, идущих с библиотекой. Теперь выводить часы в начале кластера и бегущую строку с новостями на оставшихся модулях можно без проблем, почти.

Как вы уже догадываетесь проблема с кириллическими буквами. Она тоже решаема. Рядом с предыдущим файлом в той же директории лежит файлик MD_MAX72xx_font.cpp. Это файл шрифта. Символы в нем сформированы аналогично файлу шрифта GFX библиотеки. Есть небольшое отличие. Здесь размер символа может быть меньше 5 точек. В библиотеке Adafruit GFX восклицательный знак, например, занимает также 5 точек шириной, как и любой другой символ, только используется один ряд точек. Остальные не светятся, но используются под символ. В Parola тот же восклицательный знак занимает также один ряд точек, только рядом не пустые точки, а могут стоять соседние символы. Понятнее будет разобраться по картинке.


Дополнить файл кириллическими символами аналогично файлу из первой рассмотренной библиотеки пока времени нет. Если кто-нибудь это сделает и пришлет мне файл, я добавлю его к этой статье, и Вам будут благодарны и я, и гости моего сайта.

Итог. Библиотека MAX72xx Panel от Марка Райса проста в использовании и понимании, но с бедным функционалом.

Библиотека Parola от MajicDesigns посложнее и ее возможностей хватит практически для любого применения.


Китай предоставляет за небольшую цену огромное количество не только электронных устройств, но и их компонентов. Небольшая матрица, составленная из светоизлучающих диодов может показывать нужную вам информацию, предположительно это числа, так как разрешение не очень большое, 8 на 8 светодиодов , каждый диаметром 3 мм . Эта матрица светит красным цветом, ведь он наиболее заметен и привлекает внимание больше, чем другие цвета.


Использовать для управления этой матрицы удобнее всего Arduino , ведь он цифровой. Если написать несложную программку вы сможете выводить нужную информацию на этот светодиодный "экранчик". В продаже существуют более дорогие трехцветные матрицы, в которых комбинируя основные три цвета вы можете создать почти любой.


Данная матрица имеет 16 выводов, выше предоставлена схема, где ясно показано как подключены элементарные составляющие матрицы - светодиоды, ориентируясь по ней вы сможете правильно подключить модуль для воспроизведения информации как цифровым, так и аналоговым устройством. Не забудьте про токоограничивающие резисторы, будет печально, если выгорит какой-то из пикселей. Номинальный продолжительный ток одной точки равен 20 мА , пиковый прямой ток 100 мА, напряжения питания 2,1-2,1 В , длина волны 625-630 нм , максимальная рассеиваемая мощность 40 мВт, общий здесь анод, то есть плюс. Габаритные размеры светодиодной матрицы 37 на 37 на 8 мм . Паять нужно аккуратно, не прикасайтесь паяльником с температурой 260 градусов более 5 с, рекомендуемая температура эксплуатации -40 - +70 по шкале Цельсия.

Если у вас есть несколько таких матриц на светодиодах вы можете соединять их, создавая большие по площади информационные табло.