RGB матрица 64x32

Исходники изображение:
SVG, PNG (1000px), PNG (5000px), — id:1057
SVG, PNG (1000px), PNG (5000px), — id:1058

Общие сведения:

RGB матрица 64x32 — цифровая полноцветная светодиодная матрица.

Можно использовать в любых проектах, где требуется вывод данных на цветной дисплей размерами 64x32 пикселя. В качестве данных для вывода могут использоваться изображения, символы или бегущая строка.

Представлена в 2 вариантах:

Видео:

Спецификация:

  • Шаг пикселя: 
    • P2.5: 2.5мм;
    • P3: 3мм;
  • Питание: 5В/до4А;
  • Интерфейс модуля: HUB75;
  • Структура пикселя: 1R1G1B;
  • Режим сканирования: 1/16;
  • Яркость: 1100~1300кд/кв.м;
  • Оттенки серого: 14бит;
  • Глубина цвета: >16бит;
  • Кадровая частота: 60Гц/с;
  • Частота обновления: 100Гц/с;
  • Расстояние комфортной видимости: >4м;
  • Углы обзора: 160°/160°;
  • Степень защиты: IP50 (лицевая панель)/ IP4X (задняя панель);
  • Количество пикселей: 2048;
  • Рабочая температура: -10°~40°С;
  • Размеры модуля: 
    • P3: 192мм x 96мм х 15мм;
    • P2.5: 160мм х 80мм х 15мм;

Подключение:

Шлейф:

Для подключения матрицы используется 16-проводной шлейф:

Вывод матрицы
Шлейф
Подключение шлейфа
Распиновка шлейфа

Выводы:

Для подключения шлейфа к управляющей плате Вам понадобится 16 проводов папа-папа.

Вывод шлейфаВывод Arduino UNO
(максимально 32х32)
Вывод Arduino Mega

Вывод R1

Вывод G1

Вывод B1

Вывод R2

Вывод G2

Вывод B2

Вывод A

Вывод B

Вывод C

Вывод D

Вывод CLK

Вывод OE

Вывод LAT

Выводы GND

Вывод 2

Вывод 3

Вывод 4

Вывод 5

Вывод 6

Вывод 7

Вывод A0

Вывод A1

Вывод A2

Вывод A3

Вывод 8

Вывод 9

Вывод 10

Выводы GND

Вывод 24

Вывод 25

Вывод 26

Вывод 27

Вывод 28

Вывод 29

Вывод A0

Вывод A1

Вывод A2

Вывод A3

Вывод 11

Вывод 9

Вывод 10

Выводы GND

Питание:

К RGB матрице 64х32 подключается питание напряжением 5В и током до 4А.

Чтобы матрица не вышла из строя раньше времени, рекомендуем воспользоваться надёжным источником питания.

Подробнее о матрице:

Данная матрица может быть подключена к Arduino Uno и её аналогам или к Arduino Mega. В случае с Arduino Uno и её аналогами памяти для управления всеми светодиодами матрицы не хватит, что означает либо ограничение количества управляемых светодиодов, либо переход на более ресурсоёмкую Arduino Mega.

Выбор разрешения матрицы:

Данные матрицы поддерживают масштабируемость изображения. При объявлении объекта Вы можете указать тот размер, который Вам необходим: 32х16, 32х32, 64х32.

Для выбора разрешения при объявлении объекта укажите следующие параметры:

  • Для разрешения 32х16:
RGBmatrixPanel matrix(A, B, C, CLK, LAT, OE, false);
  • Для разрешения 32х32:
RGBmatrixPanel matrix(A, B, C, D, CLK, LAT, OE, false);
  • Для разрешения 64х32:
RGBmatrixPanel matrix(A, B, C, D, CLK, LAT, OE, false, 64);

Так же матрицу возможно подключить к плате семейства Raspberry или Teensy (3.5, 3.6). Данные платы обладают характеристиками для подключения сразу нескольких матриц как единого целого, что позволит увеличить рабочую область.

Подключение к Arduino Uno и её аналогам:

Характеристики Arduino Uno и её аналогов позволяют работать с матрицами разных размеров вплоть до 32х32 пикселя. Для работы с матрицами большего размера Вам придётся ограничить количество отображаемых светодиодов до максимально поддерживаемого (32х32).

Для того, чтобы матрицы размера 64х32 и меньше работали на Arduino Uno и её аналогах, необходимо в начале любого скетча изменить следующие строки:

  • Вывод CLK:
//#define CLK  8    // Раскомментируйте, если матрица подключена к Arduino UNO
//#define CLK 11    // Раскомментируйте, если матрица подключена к Arduino MEGA
  • Разрешение:

При объявлении объекта необходимо указать требуемое разрешение:

RGBmatrixPanel matrix(A, B, C, CLK, LAT, OE, false);     // Матрица 32х16
RGBmatrixPanel matrix(A, B, C, D, CLK, LAT, OE, false);  // Матрица 32х32

Корпус

Для каждой матрицы нами так же были разработаны корпуса, используя которые Вы сможете создать законченное устройство.

Для матрицы с шагом 2.5мм:

Для матрицы с шагом 3мм:

Примеры:

Включение светодиодов случайным образом

#include <RGBmatrixPanel.h>                                             // Подключаем библиотеку для работы с матрицей

//#define CLK  8                                                        // Используем этот вывод, если матрица подключена к Arduino UNO
#define CLK 11                                                          // Используем этот вывод, если матрица подключена к Arduino MEGA
#define OE   9                                                          // Вывод Arduino, к которому подключён вывод OE матрицы
#define LAT 10                                                          // Вывод Arduino, к которому подключён вывод LAT матрицы
#define A   A0                                                          // Вывод Arduino, к которому подключён вывод A матрицы
#define B   A1                                                          // Вывод Arduino, к которому подключён вывод B матрицы
#define C   A2                                                          // Вывод Arduino, к которому подключён вывод C матрицы
#define D   A3                                                          // Вывод Arduino, к которому подключён вывод D матрицы

RGBmatrixPanel matrix(A, B, C, D, CLK, LAT, OE, false, 64);             // Объявляем объект matrix для работы с матрицей 64х32
uint8_t r, g, b;                                                        // Переменные цвета светодиодов

void setup() {
  matrix.begin();                                                       // Инициируем работу с матрицей
}

void loop() {
  matrix.fillScreen(0);                                                 // очищаем экран при каждом выполнении цикла
  r = random(1,8);g = random(1,8);b = random(1,8);                      // задаём случайные значения для цвета светодиодов
  matrix.drawPixel(random(64), random(32), matrix.Color333(r, g, b));   // случайным образом зажигаем светодиоды, включая их случайным цветом
  delay(90);                                                            // задержка 90мс
  }

Перелив всей матрицы от одного цвета к другому

#include <RGBmatrixPanel.h>                                 // Подключаем библиотеку для работы с матрицей

//#define CLK  8                                            // Используем этот вывод, если матрица подключена к Arduino UNO
#define CLK 11                                              // Используем этот вывод, если матрица подключена к Arduino MEGA
#define OE   9                                              // Вывод Arduino, к которому подключён вывод OE матрицы
#define LAT 10                                              // Вывод Arduino, к которому подключён вывод LAT матрицы
#define A   A0                                              // Вывод Arduino, к которому подключён вывод A матрицы
#define B   A1                                              // Вывод Arduino, к которому подключён вывод B матрицы
#define C   A2                                              // Вывод Arduino, к которому подключён вывод C матрицы
#define D   A3                                              // Вывод Arduino, к которому подключён вывод D матрицы

RGBmatrixPanel matrix(A, B, C, D, CLK, LAT, OE, true, 64);  // Объявляем объект matrix для работы с матрицей 64х32, всключаем двойную буферизацию
uint8_t j;                                                  // Переменная цвета

void setup() {
  matrix.begin();                                           // Инициируем работу с матрицей
}

void loop() {
  for (j = 0; j < 24; j++) {                                // запускаем счётчик
    matrix.fillScreen(Color_wheel(j));                      // получаем случайный цвет заливки экрана
    matrix.swapBuffers(false);                              // выводим цвет из буфера на экран
  }
}

// смешивание цвета
uint16_t Color_wheel(byte Color) {                          // функция зависит от параметра Color
  if (Color < 8) {                                          // если значение параметра меньше 8, тогда
    return matrix.Color333(7 - Color, Color, 0);            // назначаем цвет с переходом от красного к зелёному
  } else if (Color < 16) {                                  // если значение параметра меньше 16, тогда
    Color -= 8;                                             // ограничиваем значение параметра Color, чтобы он входил в интервал от 0 до 7
    return matrix.Color333(0, 7 - Color, Color);            // назначаем цвет с переходом от зелёного к синему
  } else {                                                  // если значение параметра больше 16, тогда
    Color -= 16;                                            // ограничиваем значение параметра Color, чтобы он входил в интервал от 0 до 7
    return matrix.Color333(Color, 0, 7 - Color);            // назначаем цвет с переходом от синего к красному
  }
}

Отображение квадратов на матрице

#include <RGBmatrixPanel.h>                                   // Подключаем библиотеку для работы с матрицей

//#define CLK  8                                              // Используем этот вывод, если матрица подключена к Arduino UNO
#define CLK 11                                                // Используем этот вывод, если матрица подключена к Arduino MEGA
#define OE   9                                                // Вывод Arduino, к которому подключён вывод OE матрицы
#define LAT 10                                                // Вывод Arduino, к которому подключён вывод LAT матрицы
#define A   A0                                                // Вывод Arduino, к которому подключён вывод A матрицы
#define B   A1                                                // Вывод Arduino, к которому подключён вывод B матрицы
#define C   A2                                                // Вывод Arduino, к которому подключён вывод C матрицы
#define D   A3                                                // Вывод Arduino, к которому подключён вывод D матрицы

RGBmatrixPanel matrix(A, B, C, D, CLK, LAT, OE, false, 64);   // Объявляем объект matrix для работы с матрицей 64х32, всключаем двойную буферизацию
uint8_t j;                                                    // Переменная цвета

void setup() {
  matrix.begin();                                             // Инициируем работу с матрицей
}

void loop() {
  for (j = 0; j < 24; j++) {                                  // задаём случайное число j
    matrix.fillRect(2, 2, 28, 28, Color_wheel(j));            // выводим на экран квадрат размером 28х28
    delay(1);                                                 // задержка 1мс
    matrix.drawRect(34, 2, 28, 28, Color_wheel(j + 4));       // выводим на экран рамку квадрата размером 28х28
    delay(1);                                                 // задержка 1мс
  }
}

// смешивание цвета
uint16_t Color_wheel(byte Color) {                            // функция зависит от параметра Color
  if (Color < 8) {                                            // если значение параметра меньше 8, тогда
    return matrix.Color333(7 - Color, Color, 0);              // назначаем цвет с переходом от красного к зелёному
  } else if (Color < 16) {                                    // если значение параметра меньше 16, тогда
    Color -= 8;                                               // ограничиваем значение параметра Color, чтобы он входил в интервал от 0 до 7
    return matrix.Color333(0, 7 - Color, Color);              // назначаем цвет с переходом от зелёного к синему
  } else {                                                    // если значение параметра больше 16, тогда
    Color -= 16;                                              // ограничиваем значение параметра Color, чтобы он входил в интервал от 0 до 7
    return matrix.Color333(Color, 0, 7 - Color);              // назначаем цвет с переходом от синего к красному
  }
}

Вывод гаммы цвета в круге

#include <RGBmatrixPanel.h>                                             // Подключаем библиотеку для работы с матрицей

//#define CLK  8                                                        // Используем этот вывод, если матрица подключена к Arduino UNO
#define CLK 11                                                          // Используем этот вывод, если матрица подключена к Arduino MEGA
#define OE   9                                                          // Вывод Arduino, к которому подключён вывод OE матрицы
#define LAT 10                                                          // Вывод Arduino, к которому подключён вывод LAT матрицы
#define A   A0                                                          // Вывод Arduino, к которому подключён вывод A матрицы
#define B   A1                                                          // Вывод Arduino, к которому подключён вывод B матрицы
#define C   A2                                                          // Вывод Arduino, к которому подключён вывод C матрицы
#define D   A3                                                          // Вывод Arduino, к которому подключён вывод D матрицы

RGBmatrixPanel matrix(A, B, C, D, CLK, LAT, OE, false, 64);             // Объявляем объект matrix для работы с матрицей 64х32, включаем двойную буферизацию

void setup() {
  int      x, y, hue;                                                   // Задаём переменные для координат X и Y и параметра оттенка цвета
  float    dx, dy, d;                                                   // переменные для диаметра окружности по Y, X и общему
  uint8_t  sat, val;                                                    // Задаём переменные для значений насыщенности и яркости
  uint16_t c;                                                           // Задаём переменную для задания цвета пикселя
  matrix.begin();                                                       // Инициируем работу с матрицей
  for (y = 0; y < matrix.height(); y++) {                               // Запускаем цикл, пока координата по Y меньше значения высоты матрицы
    dy = 15.5 - (float)y;                                               // Задаём функцию, при которой в матрицу впишется окружность, радиусом 15,5 пикселей по оси Y
    for (x = 0; x < matrix.height(); x++) {                             // Запускаем цикл, пока координата по X меньше значения высоты матрицы
      dx = 15.5 - (float)x;                                             // Задаём функцию, при которой в матрицу впишется окружность, радиусом 15,5 пикселей по оси X
      d  = dx * dx + dy * dy;                                           // Находим значение диаметра
      if (d <= (16.5 * 16.5)) {                                         // Если окружность с полученными диаметрами вписывается в матрицу, то
        hue = (int)((atan2(-dy, dx) + PI) * 1536.0 / (PI * 2.0));       // Определяем цвет пикселя
        d = sqrt(d);                                                    // Вычисляем квадратный корень из диаметра
        if (d > 15.5) {                                                 // Если диаметр больше 15.5 пикселей(окружность не вписывается в матрицу), то
          sat = 255;                                                    // Задаём максимальную насыщенность
          val = (int)((1.0 - (d - 15.5)) * 255.0 + 0.5);                // По границе окружности гасим светодиоды
        } else {                                                        // Если диаметр меньше 15.5 пикселей (окружность вписывается в матрицу), то
          sat = (int)(d / 15.5 * 255.0 + 0.5);                          // Меняем цвет от края окружности к центру (в центре белый цвет)
          val = 255;                                                    // Задаём максимальную яркость
        }
        c = matrix.ColorHSV(hue, sat, val, true);                       // Задаём цвет пикселя
      } else {                                                          // Если пиксель не попадает в окружность, то
        c = 0;                                                          // гасим его
      }
      matrix.drawPixel(x, y, c);                                        // Включаем пиксель с указанным цветом
    }
  }
}

void loop() {}

"Прыгающие" по матрице круги

#include <RGBmatrixPanel.h>                                             // Подключаем библиотеку для работы с матрицей

//#define CLK  8                                                        // Используем этот вывод, если матрица подключена к Arduino UNO
#define CLK 11                                                          // Используем этот вывод, если матрица подключена к Arduino MEGA
#define OE   9                                                          // Вывод Arduino, к которому подключён вывод OE матрицы
#define LAT 10                                                          // Вывод Arduino, к которому подключён вывод LAT матрицы
#define A   A0                                                          // Вывод Arduino, к которому подключён вывод A матрицы
#define B   A1                                                          // Вывод Arduino, к которому подключён вывод B матрицы
#define C   A2                                                          // Вывод Arduino, к которому подключён вывод C матрицы
#define D   A3                                                          // Вывод Arduino, к которому подключён вывод D матрицы

RGBmatrixPanel matrix(A, B, C, D, CLK, LAT, OE, true, 64);              // Объявляем объект matrix для работы с матрицей 64х32, включаем двойную буферизацию

int8_t ball[3][4] = {                                                   // Массив с начальными координатами кругов, а так же со значениями, на сколько координаты меняются при каждом выполнении цикла
  {  6,  6,  1,  1 },                                                   // Координаты Синего круга {6;6} и каждый цикл они меняются на 1 по X и на 1 по Y
  { 17, 15,  1, -1 },                                                   // Координаты Зелёного круга {17;15} и каждый цикл они меняются на 1 по X и на -1 по Y
  { 27,  6, -1,  1 }                                                    // Координаты Синего круга {27;6} и каждый цикл они меняются на -1 по X и на 1 по Y
};

static const uint16_t ballcolor[3] = {                                  // Массив с цветами кругов
  matrix.Color333(0, 0, 3),                                             // Синий
  matrix.Color333(0, 3, 0),                                             // Зелёный
  matrix.Color333(3, 0, 0)                                              // Красный
};

void setup() {
  matrix.begin();                                                       // Инициируем работу с матрицей
}

void loop() {
  byte i;                                                               // переменная для того, чтобы круги "бегали" по экрану, меняя координаты
  matrix.fillScreen(0);                                                 // очищаем экран
  for (byte i = 0; i < 3; i++) {                                        // запускаем счётчик для смены координат кругов
    matrix.fillCircle(ball[i][0], ball[i][1], 5, ballcolor[i]);         // Рисуем 3 круга с разными начальными координатами и разного цвета, но одинакового радиуса
    ball[i][0] += ball[i][2];                                           // Обновляем Х-координату кругов
    ball[i][1] += ball[i][3];                                           // Обновляем Y-координату кругов
    if ((ball[i][0] == 5) || (ball[i][0] == (matrix.width() - 5))) {    // Если круг по Х дошёл до границы, то
      ball[i][2] *= -1;                                                 // инициируем движение в обратную сторону
    }
    if ((ball[i][1] == 5) || (ball[i][1] == (matrix.height() - 5))) {   // Если круг по Y дошёл до границы, то
      ball[i][3] *= -1;                                                 // инициируем движение в обратную сторону
    }
  }
  matrix.swapBuffers(false);                                            // выводим объекты из буфера на экран
}

Бегущая строка

#include <RGBmatrixPanel.h>                                   // Подключаем библиотеку для работы с матрицей

//#define CLK  8                                              // Используем этот вывод, если матрица подключена к Arduino UNO
#define CLK 11                                                // Используем этот вывод, если матрица подключена к Arduino MEGA
#define OE   9                                                // Вывод Arduino, к которому подключён вывод OE матрицы
#define LAT 10                                                // Вывод Arduino, к которому подключён вывод LAT матрицы
#define A   A0                                                // Вывод Arduino, к которому подключён вывод A матрицы
#define B   A1                                                // Вывод Arduino, к которому подключён вывод B матрицы
#define C   A2                                                // Вывод Arduino, к которому подключён вывод C матрицы
#define D   A3                                                // Вывод Arduino, к которому подключён вывод D матрицы

RGBmatrixPanel matrix(A, B, C, D, CLK, LAT, OE, true, 64);    // Объявляем объект matrix для работы с матрицей 64х32, всключаем двойную буферизацию

const char str[] = "Input your text here!";                   // Массив для хранения текста, выводимого на матрицу
int16_t    textX         = matrix.width();                    // Переменная с X-координатой текста

// Минимальное значение координаты текста (количество символов в строке, помноженное на ширину одного символа), после которой текст начнёт повторно выводиться
int16_t    textMin       = sizeof(str) * -6;                  

void setup() {
  matrix.begin();                                             // Инициируем работу с матрицей
  matrix.setTextWrap(false);                                  // Отключаем перенос текста на следующую строку
  matrix.setTextSize(1);                                      // Устанавливаем размер текста равным 1 (6 пикселей на символ)
}

void loop() {
  matrix.fillScreen(0);                                       // Очищаем экран
  matrix.setTextColor(matrix.Color333(3,3,3));                // Устанавливаем цвет текста
  matrix.setCursor(textX, 12);                                // Указываем начальную координату вывода текста {textX; 12}
  matrix.print(str);                                          // Выводим текст
  --textX;                                                    // Сдвигаем текст на 1 пиксель при каждом выполнении цикла
  if(textX < textMin) textX = matrix.width();                 // Если был отображён весь текст, то начинаем его выводить заново
  matrix.swapBuffers(false);                                  // Выводим текст из буфера на матрицу
}

Вывод произвольного изображения

#include <RGBmatrixPanel.h>                                                       // Подключаем библиотеку для работы с матрицей

//#define CLK  8                                                                  // Используем этот вывод, если матрица подключена к Arduino UNO
#define CLK 11                                                                    // Используем этот вывод, если матрица подключена к Arduino MEGA
#define OE   9                                                                    // Вывод Arduino, к которому подключён вывод OE матрицы
#define LAT 10                                                                    // Вывод Arduino, к которому подключён вывод LAT матрицы
#define A   A0                                                                    // Вывод Arduino, к которому подключён вывод A матрицы
#define B   A1                                                                    // Вывод Arduino, к которому подключён вывод B матрицы
#define C   A2                                                                    // Вывод Arduino, к которому подключён вывод C матрицы
#define D   A3                                                                    // Вывод Arduino, к которому подключён вывод D матрицы

RGBmatrixPanel matrix(A, B, C, D, CLK, LAT, OE, true, 64);                        // Объявляем объект matrix для работы с матрицей 64х32, всключаем двойную буферизацию

static const uint8_t PROGMEM img[] = {                                            // Массив с изображением
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000111,B11111000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00001111,B11111100,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00111111,B11111111,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B01111111,B11111111,B10000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B11111110,B00011111,B11000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B11111100,B00001111,B11000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B11111000,B00000111,B11000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B11111000,B00000111,B11000000,B00000000,B00000000,
B00000000,B00000000,B00111000,B11111000,B00000111,B11000000,B00000000,B00000000,
B00000000,B00000000,B00111000,B11111000,B00000111,B11000000,B00000000,B00000000,
B00000000,B00000000,B00111000,B11111111,B11111111,B11000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B11111111,B11111111,B11000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B11111111,B11111111,B11000000,B00000000,B00000000,
B00000000,B00000000,B00111000,B11111000,B00000111,B11000000,B00000000,B00000000,
B00000000,B00000000,B00111000,B11111000,B00000111,B11000000,B00000000,B00000000,
B00000000,B00000000,B00111000,B11111000,B00000111,B11000000,B00000000,B00000000,
B00000000,B00000000,B00111000,B11111000,B00000111,B11000000,B00000000,B00000000,
B00000000,B00000000,B00111000,B11111000,B00000111,B11000000,B00000000,B00000000,
B00000000,B00000000,B00111000,B11111000,B00000111,B11000000,B00000000,B00000000,
B00000000,B00000000,B00111000,B11111000,B00000111,B11000000,B00000000,B00000000,
B00000000,B00000000,B00111000,B11111000,B00000111,B11000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
};

void setup() {
  matrix.begin();                                                                 // Инициируем работу с матрицей
}

void loop() {
  matrix.fillScreen(0);                                                           // Очищаем экран
  matrix.drawBitmap(0, 0, img, 64, 32, matrix.Color333(3,3,3));                   // Выводим изображение из массива, задав ему белый цвет
  matrix.swapBuffers(false);                                                      // Выводим изображение из буфера на матрицу
}

Описание функций библиотеки:

Библиотека Adafruit RGBmatrixPanel работает только в паре с библиотекой Adafruit GFX, учитывайте это при работе с матрицей.

Подключение библиотеки:

  • Если Вы используете матрицу 32х16, тогда закомментируйте строку с константой D, и удалите её в дальнейшем в строке объявления объекта;
  • Если Вы используете матрицу 32х32, тогда удалите из строки объявления объекта значение 64 в конце;
  • Если Вы используете матрицу 64х32, тогда оставьте всё, как есть;
#include <RGBmatrixPanel.h>                                     // Подключаем библиотеку для работы с матрицей

//#define CLK  8                                                // Используем этот вывод, если матрица подключена к Arduino UNO
#define   CLK 11                                                // Используем этот вывод, если матрица подключена к Arduino MEGA
#define   OE   9                                                // Вывод Arduino, к которому подключён вывод OE матрицы
#define   LAT 10                                                // Вывод Arduino, к которому подключён вывод LAT матрицы
#define   A   A0                                                // Вывод Arduino, к которому подключён вывод A матрицы
#define   B   A1                                                // Вывод Arduino, к которому подключён вывод B матрицы
#define   C   A2                                                // Вывод Arduino, к которому подключён вывод C матрицы
#define   D   A3                                                // Вывод Arduino, к которому подключён вывод D матрицы

RGBmatrixPanel matrix(A, B, C, D, CLK, LAT, OE, false, 64);     // Объявляем объект matrix для работы с матрицей 64х32

Функция begin();

  • Назначение: Функция инициирует работу светодиодной матрицы.
  • Синтаксис: begin();
  • Параметры: Нет.
  • Возвращаемые значения: Нет.
  • Примечание:
    • Функцию необходимо вызвать до обращения к любым другим функциям библиотеки.
    • Функцию достаточно вызвать один раз в коде setup.
    • Функцию можно использовать для определения наличия светодиодной матрицы.
  • Пример:
matrix.begin(); // Инициируем работу с матрицей

Функция fillScreen();

  • Назначение: Заливка всей матрицы указанным цветом.
  • Синтаксис: fillScreen(ЦВЕТ):
  • Параметры: 
    • ЦВЕТ - заливка светодиода указанным цветом:
      • matrix.Color333(R,G,B):
        • R - яркость красного цвета, указывается числом от 0 до 7;
        • G - яркость зелёного цвета, указывается числом от 0 до 7;
        • B - яркость синего цвета, указывается числом от 0 до 7;
  • Возвращаемые значения: Нет.
  • Примечание:
    • Установленная яркость не сохраняется после отключения питания.
  • Пример:
matrix.fillScreen(matrix.Color333(0, 0, 0));    // Заливка всей матрицы чёрным цветом (выключает все светодиоды)

Функция drawPixel();

  • Назначение: Заливка одного светодиода указанным цветом.
  • Синтаксис: drawPixel(X, Y, ЦВЕТ):
  • Параметры: 
    • X - координата светодиода по горизонтали;
    • Y - координата светодиода по вертикали;
    • ЦВЕТ - заливка светодиода указанным цветом:
      • matrix.Color333(R,G,B):
          • R - яркость красного цвета, указывается числом от 0 до 7;
          • G - яркость зелёного цвета, указывается числом от 0 до 7;
          • B - яркость синего цвета, указывается числом от 0 до 7;
  • Возвращаемые значения: Нет.
  • Примечание:
    • Указанная фигура не сохраняется после отключения питания;
  • Пример:
matrix.drawPixel(3, 5, matrix.Color333(7, 7, 7));    // Заливка пикселя с координатой {3;5} белым цветом

Функция drawLine();

  • Назначение: Заливка линии толщиной 1 пиксель указанным цветом.
  • Синтаксис: drawLine(X1, Y1, X2, Y2, ЦВЕТ):
  • Параметры: 
    • X1 - левая верхняя координата линии по горизонтали;
    • Y1 - левая верхняя координата линии по вертикали;
    • X2 - правая нижняя координата линии по горизонтали;
    • Y2 - правая нижняя координата линии по вертикали;
    • ЦВЕТ - заливка светодиода указанным цветом:
      • matrix.Color333(R,G,B):
          • R - яркость красного цвета, указывается числом от 0 до 7;
          • G - яркость зелёного цвета, указывается числом от 0 до 7;
          • B - яркость синего цвета, указывается числом от 0 до 7;
  • Возвращаемые значения: Нет.
  • Примечание:
    • Указанная фигура не сохраняется после отключения питания;
  • Пример:
    matrix.drawLine(0, 0, 22, 21, matrix.Color333(0, 7, 0));    // Заливка линии зелёным цветом

    Функция drawRect();

    • Назначение: Заливка рамки прямоугольника толщиной 1 пиксель указанным цветом.
    • Синтаксис: drawRect(X1, Y1, ШИРИНА, ВЫСОТА, ЦВЕТ):
    • Параметры: 
      • X1 - левая верхняя координата квадрата по горизонтали;
      • Y1 - левая верхняя координата квадрата по вертикали;
      • ШИРИНА - длина стороны прямоугольника по горизонтали;
      • ВЫСОТА - длина стороны прямоугольника по вертикали;
      • ЦВЕТ - заливка светодиода указанным цветом:
        • matrix.Color333(R,G,B):
            • R - яркость красного цвета, указывается числом от 0 до 7;
            • G - яркость зелёного цвета, указывается числом от 0 до 7;
            • B - яркость синего цвета, указывается числом от 0 до 7;
    • Возвращаемые значения: Нет.
    • Примечание:
      • Указанная фигура не сохраняется после отключения питания;
    • Пример:
      matrix.drawRect(0, 0, 7, 7, matrix.Color333(7, 0, 0));    // Заливка рамки квадрата размером 7х7 красным цветом

      Функция fillRect();

      • Назначение: Заливка прямоугольника указанным цветом.
      • Синтаксис: fillRect(X1, Y1, ШИРИНА, ВЫСОТА, ЦВЕТ):
      • Параметры: 
        • X1 - левая верхняя координата квадрата по горизонтали;
        • Y1 - левая верхняя координата квадрата по вертикали;
        • ШИРИНА - длина стороны прямоугольника по горизонтали;
        • ВЫСОТА - длина стороны прямоугольника по вертикали;
        • ЦВЕТ - заливка светодиода указанным цветом:
          • matrix.Color333(R,G,B):
              • R - яркость красного цвета, указывается числом от 0 до 7;
              • G - яркость зелёного цвета, указывается числом от 0 до 7;
              • B - яркость синего цвета, указывается числом от 0 до 7;
      • Возвращаемые значения: Нет.
      • Примечание:
        • Указанная фигура не сохраняется после отключения питания
      • Пример:
      matrix.fillRect(0, 0, 5, 5, matrix.Color333(0, 0, 7));    // Заливка квадрата размером 5х5 синим цветом

      Функция drawCircle();

      • Назначение: Заливка рамки окружности толщиной 1 пиксель указанным цветом.
      • Синтаксис: drawCircle(X, Y, R, ЦВЕТ):
      • Параметры: 
        • X - координата окружности по горизонтали;
        • Y - координата окружности по вертикали;
        • R - радиус окружности;
        • ЦВЕТ - заливка светодиода указанным цветом:
          • matrix.Color333(R,G,B):
              • R - яркость красного цвета, указывается числом от 0 до 7;
              • G - яркость зелёного цвета, указывается числом от 0 до 7;
              • B - яркость синего цвета, указывается числом от 0 до 7;
      • Возвращаемые значения: Нет.
      • Примечание:
        • Указанная фигура не сохраняется после отключения питания
      • Пример:
      matrix.drawCircle(7, 7, 7, matrix.Color333(7, 7, 0));    // Заливка рамки окружности радиусом 7 пикселей и толщиной линии 1 пиксель жёлтым цветом

      Функция fillCircle();

      • Назначение: Заливка окружности указанным цветом.
      • Синтаксис: fillCircle(X, Y, R, ЦВЕТ):
      • Параметры: 
        • X - координата окружности по горизонтали;
        • Y - координата окружности по вертикали;
        • R - радиус окружности;
        • ЦВЕТ - заливка светодиода указанным цветом:
          • matrix.Color333(R,G,B):
              • R - яркость красного цвета, указывается числом от 0 до 7;
              • G - яркость зелёного цвета, указывается числом от 0 до 7;
              • B - яркость синего цвета, указывается числом от 0 до 7;
      • Возвращаемые значения: Нет.
      • Примечание:
        • Указанная фигура не сохраняется после отключения питания
      • Пример:
        matrix.fillCircle(23, 7, 7, matrix.Color333(7, 0, 7));    // Заливка окружности радиусом 7 пикселей фиолетовым цветом

        Функция drawBitmap();

        • Назначение: Вывод произвольного изображения;
        • Синтаксис: drawBitmap(X, Y, ИМЯ_МАССИВА, ШИРИНА,ВЫСОТА, ЦВЕТ);
        • Параметры:
          • X - координата левого верхнего угла изображения по горизонтали;
          • Y - координата левого верхнего угла изображения по вертикали;
          • ИМЯ_МАССИВА - имя массива с изображением;
          • ШИРИНА - размер изображения в пикселях по ширине;
          • ВЫСОТА - размер изображения в пикселях по высоте;
          • ЦВЕТ - заливка светодиода указанным цветом:
            • matrix.Color333(R,G,B):
                • R - яркость красного цвета, указывается числом от 0 до 7;
                • G - яркость зелёного цвета, указывается числом от 0 до 7;
                • B - яркость синего цвета, указывается числом от 0 до 7;
        • Возвращаемые значения: Нет.
        • Пример:
        matrix.drawBitmap(0, 0, myBitmap, 64,32, matrix.Color333(7,0,0));    // Вывод массива myBitmap с изображением на матрицу

        Функция setCursor();

        • Назначение: Указание верхней левой точки начала вывода текста;
        • Синтаксис: setCursor(X, Y):
        • Параметры: 
          • X - координата по горизонтали;
          • Y - координата по вертикали;
        • Возвращаемые значения: Нет.
        • Примечание:
          • По умолчанию, начальной точкой вывода текста является точка {0;0};
        • Пример:
        matrix.setCursor(1, 0);    // Устанавливаем начало отображения текста в точке {1;0}
        

        Функция setTextWrap()

        • Назначение: Перенос текста на следующую строку;
        • Синтаксис: setTextWrap(ФЛАГ):
        • Параметры: 
          • bool true / false - флаг переноса строки.
        • Возвращаемые значения: Нет.
        • Примечание:
          • При указании false строка выводится единым целым, всё, что не влезло по размеру отсекается;
          • При указании true строка выводится на матрицу так, что всё, что не влезло, автоматически переносится на следующую строку;
        • Пример:
        matrix.setTextWrap(false);    // Текст не переносится на следующую строку и выводится "как есть";
        matrix.setTextWrap(true);     // Текст, который не влез в одну строку, переносится на следующую строку;

        Функция setTextSize();

        • Назначение: Задание размера букв текста;
        • Синтаксис: setTextSize(РАЗМЕР):
        • Параметры: 
          • РАЗМЕР - указывается числом от 1 до 8;
        • Возвращаемые значения: Нет.
        • Примечание:
          • По умолчанию размер текста указан равным 1.
          • Размер символов размера 1: 8х5 пикселей;
        • Пример:
        matrix.setTextSize(1);    // Устанавливает минимальный размер текста

        Функция setTextColor();

        • Назначение: Задание цвета выводимому тексту;
        • Синтаксис: setTextColor(ЦВЕТ):
        • Параметры: 
          • ЦВЕТ - заливка светодиода указанным цветом:
            • matrix.Color333(R,G,B):
              • R - яркость красного цвета, указывается числом от 0 до 7;
              • G - яркость зелёного цвета, указывается числом от 0 до 7;B - яркость синего цвета, указывается числом от 0 до 7;
        • Возвращаемые значения: Нет.
        • Пример:
        matrix.setTextColor(matrix.Color333(0,0,7));    // Устанавливает отображать цвет текста синим цветом
        

        Функция print();

        • Назначение: Вывод текста;
        • Синтаксис: print(ТЕКСТ):
        • Параметры: 
          • ТЕКСТ - текст, выводимый на матрицу;
        • Возвращаемые значения: Нет.
        • Пример:
        matrix.print("Hello, World!");    // Выводит указанный текст на матрицу;

        Функция backBuffer();

        • Назначение: Возвращает адрес массива с элементами матрицы;
        • Синтаксис: backBuffer();
        • Параметры: Нет.
        • Возвращаемые значения:
          • адрес буфера матрицы;
        • Примечание:
          • Данная функция используется с целью ускорения вывода изображения, позволяя записывать данные сначала в буфер, а затем на матрицу, но при этом время инициализации увеличивается;
          • Функция указывается до matrix.begin();
        • Пример:
          uint8_t *ptr = matrix.backBuffer(); // переменная ptr - указатель на адрес буфера матрицы;
          memcpy_P(ptr, img, sizeof(img));    // массив img скопирован из flash-памяти в буфер;

          Функция включения двойной буферизации;

          • Назначение: Включает двойную буферизацию для сглаживания эффектов анимации и уменьшения эффекта "мерцания";
          • Синтаксис: RGBmatrixPanel matrix(A, B, C, D, CLK, LAT, OE, ФЛАГ, 64);
          • Параметры: 
            • bool true / false - флаг включения двойной буферизации;
          • Возвращаемые значения: Нет
          • Примечание:
            • Если включена двойная буферизация, то данные не будут выводиться на экран до тех пор, пока не будет вызвана функция swapBuffer();
            • Если указан флаг false, тогда используется обычная буферизация;
            • Если указан флаг true, тогда используется двойная буферизация, в связи с чем объём памяти, требуемый для выполнения кода, увеличивается;
          • Пример:
            RGBmatrixPanel matrix(A, B, C, D, CLK, LAT, OE, true, 64);    // параметр true включает двойную буферизацию;
            

            Функция swapBuffers();

            • Назначение: При включенной двойной буферизации - выводит из буфера данные;
            • Синтаксис: swapBuffers(ФЛАГ);
            • Параметры: 
              • bool true / false - флаг циклического копирования в буфер;
            • Возвращаемые значения:
              • адрес буфера матрицы;
            • Примечание:
              • Данная функция используется для сглаживания вывода изображения и уменьшения эффекта "мерцания";
              • Если включена двойная буферизация, то данные не будут выводиться на экран до тех пор, пока не будет вызвана функция swapBuffers();
              • Если указан флаг false, тогда данные копируются в буфер однократно и в дальнейшем могут быть удалены. При выводе новой информации на матрицу, она будет отображаться поверх старой;
              • Если указан флаг true, тогда данные циклически копируются в буфер при каждом выполнении кода, что позволяет отображать информацию "поверх" всего остального;
            • Пример:
              RGBmatrixPanel matrix(A, B, C, D, CLK, LAT, OE, true, 64);    // параметр true включает двойную буферизацию;
              matrix.swapBuffers(false);                                    // вызов функции выводит на экран информацию из буфера;

              Функции width() и height();

              • Назначение: Позволяют получить значение размера матрицы
              • Синтаксис: width() / height();
              • Параметры: Нет;
              • Возвращаемые значения:
                • width() - возвращает максимальное значение пикселей по горизонтали (ширина);
                • height() - возвращает максимальное значение пикселей по вертикали (высота);
              • Примечание: Нет;
              • Пример:
                Serial.print("Width = ");  Serial.println(matrix.width());     // Выводит в монитор порта ширину светодиодной матрицы
                Serial.print("Height = "); Serial.println(matrix.height());    // Выводит в монитор порта высоту светодиодной матрицы

                Функции указания цвета

                Изначально, библиотека была рассчитана на вывод цвета в формате 3R3G3B (3 бита на канал).

                В дальнейшем, после внесения в неё изменений, формат вывода менялся на 4R4G4B (4 бита) и 8R8G8B (8 бит), а в последней версии стал универсальным для всех дисплеев и матриц, и теперь выводится в формате 5R6G5B(16 бит).

                В связи с этим, у библиотеки есть несколько функций задачи цвета, которые в конечном итоге выводят цвет в формате 5R6G5B:

                Функция Color333();

                • Назначение: Заливка пикселя(ей) указанным цветом;
                • Синтаксис: Color333(R, G, B):
                • Параметры: 
                  • R - яркость красного цвета, указывается числом от 0 до 7;
                  • G - яркость зелёного цвета, указывается числом от 0 до 7;
                  • B - яркость синего цвета, указывается числом от 0 до 7;
                • Возвращаемые значения: Нет.
                • Примечание:
                  • Преобразует 3-битный формат в 16-битный формат;
                • Пример:
                matrix.Color333(7,0,0);    // Устанавливаем цвет отображения - красный

                Функция Color444();

                • Назначение: Заливка пикселя(ей) указанным цветом;
                • Синтаксис: Color444(R, G, B):
                • Параметры: 
                  • R - яркость красного цвета, указывается числом от 0 до 7;
                  • G - яркость зелёного цвета, указывается числом от 0 до 7;
                  • B - яркость синего цвета, указывается числом от 0 до 7;
                • Возвращаемые значения: Нет.
                • Примечание:
                  • Преобразует 4-битный формат в 16-битный формат;
                • Пример:
                matrix.Color444(0,7,0);    // Устанавливаем цвет отображения - зелёный

                Функция Color888();

                • Назначение: Заливка пикселя(ей) указанным цветом;
                • Синтаксис: Color888(R, G, B, ФЛАГ):
                • Параметры: 
                  • R - яркость красного цвета, указывается числом от 0 до 7;
                  • G - яркость зелёного цвета, указывается числом от 0 до 7;
                  • B - яркость синего цвета, указывается числом от 0 до 7;
                  • ФЛАГ - преобразование цвета через цветовую карту;
                • Возвращаемые значения: Нет.
                • Примечание:
                  • Если ФЛАГ не указан, то линейно преобразует 8-битный формат в 16-битный формат;
                  • Если ФЛАГ указан, то преобразует 8-битный формат в 4-битный, а затем в 16-битный формат;
                • Пример:
                matrix.Color333(0,0,7);    // Устанавливаем цвет отображения - синий

                Функция ColorHSV();

                • Назначение: Заливка пикселя(ей) указанным цветом;
                • Синтаксис: ColorHSV(H, S, V, ФЛАГ):
                • Параметры: 
                  • H - цветовой тон, указывается числом от 0 до 1536;
                  • S - насыщенность, указывается числом от 1 до 255;
                  • V - яркость, указывается числом от 1 до 255;
                  • ФЛАГ - преобразование цвета через цветовую карту;
                • Возвращаемые значения: Нет.
                • Примечание:
                  • Если ФЛАГ указан, то происходит преобразование цвета из 8-битного в 4-битный, а затем в 16-битный формат;
                  • Если ФЛАГ не указан, то происходит линейное преобразование из 4-битного формата цвета в 16-битный формат;
                • Пример:
                matrix.fillScreen(matrix.ColorHSV(200, 255, 255, true));    // Устанавливаем цвет отображения - жёлтый, с максимальной яркостью свечения и максимальной насыщенностью цвета

                Применение:

                • Бегущая строка;
                • Табло информации;
                • Вывод графических изображений;

                Ссылки:

                Обсуждение