RGB матрица 64x32

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

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

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

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

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

Видео:

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

  • Шаг пикселя: 
    • P2.5: 2.5мм;
    • P3: 3мм;
    • P4: 4мм;
  • Питание: 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мм;
    • P4: 256мм x 128мм х 15мм;

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

Шлейф:

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

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

Выводы:

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

Вывод шлейфаВывод Arduino UNO
(максимально 32х32)
Вывод Piranha ULTRAВывод 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

Вывод 8

Вывод 9

Вывод 4

Вывод 5

Вывод 6

Вывод 7

Вывод A0

Вывод A1

Вывод A2

Вывод A3

Вывод 11

Вывод 12

Вывод 13

Выводы GND

Вывод 24

Вывод 25

Вывод 26

Вывод 27

Вывод 28

Вывод 29

Вывод A0

Вывод A1

Вывод A2

Вывод A3

Вывод 11

Вывод 9

Вывод 10

Выводы GND

Питание:

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

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

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

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

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

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

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

    • Для разрешения 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, OE, LAT:
    // Расскоментируйте эти строки, если матрица подключена к Arduino UNO
    //#define CLK  8
    //#define OE   9
    //#define LAT 10
    
    // Расскоментируйте эти строки, если матрица подключена к Arduino MEGA
    //#define CLK 11
    //#define OE   9
    //#define LAT 10
    
    // Расскоментируйте эти строки, если матрица подключена к Piranha ULTRA
    //#define CLK 11
    //#define OE  12
    //#define LAT 13 
    • Разрешение:

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

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

    Корпус

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

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

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

    Примеры:

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

    #include <RGBmatrixPanel.h>                                             // Подключаем библиотеку для работы с матрицей
    
    // Используем эти выводы, если матрица подключена к Arduino UNO
    //#define CLK  8
    //#define OE   9
    //#define LAT 10
    
    // Используем эти выводы, если матрица подключена к Arduino MEGA
    //#define CLK 11
    //#define OE   9
    //#define LAT 10
    
    // Используем эти выводы, если матрица подключена к Piranha ULTRA
    #define CLK 11                                                          // Вывод Arduino, к которому подключён вывод CLK матрицы
    #define OE  12                                                          // Вывод Arduino, к которому подключён вывод OE матрицы
    #define LAT 13                                                          // Вывод 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>                                 // Подключаем библиотеку для работы с матрицей
    
    // Используем эти выводы, если матрица подключена к Arduino UNO
    //#define CLK  8
    //#define OE   9
    //#define LAT 10
    
    // Используем эти выводы, если матрица подключена к Arduino MEGA
    //#define CLK 11
    //#define OE   9
    //#define LAT 10
    
    // Используем эти выводы, если матрица подключена к Piranha ULTRA
    #define CLK 11                                              // Вывод Arduino, к которому подключён вывод CLK матрицы
    #define OE  12                                              // Вывод Arduino, к которому подключён вывод OE матрицы
    #define LAT 13                                              // Вывод 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>                                   // Подключаем библиотеку для работы с матрицей
    
    // Используем эти выводы, если матрица подключена к Arduino UNO
    //#define CLK  8
    //#define OE   9
    //#define LAT 10
    
    // Используем эти выводы, если матрица подключена к Arduino MEGA
    //#define CLK 11
    //#define OE   9
    //#define LAT 10
    
    // Используем эти выводы, если матрица подключена к Piranha ULTRA
    #define CLK 11                                                // Вывод Arduino, к которому подключён вывод CLK матрицы
    #define OE  12                                                // Вывод Arduino, к которому подключён вывод OE матрицы
    #define LAT 13                                                // Вывод 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>                                             // Подключаем библиотеку для работы с матрицей
    
    // Используем эти выводы, если матрица подключена к Arduino UNO
    //#define CLK  8
    //#define OE   9
    //#define LAT 10
    
    // Используем эти выводы, если матрица подключена к Arduino MEGA
    //#define CLK 11
    //#define OE   9
    //#define LAT 10
    
    // Используем эти выводы, если матрица подключена к Piranha ULTRA
    #define CLK 11                                                          // Вывод Arduino, к которому подключён вывод CLK матрицы
    #define OE  12                                                          // Вывод Arduino, к которому подключён вывод OE матрицы
    #define LAT 13                                                          // Вывод 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>                                             // Подключаем библиотеку для работы с матрицей
    
    // Используем эти выводы, если матрица подключена к Arduino UNO
    //#define CLK  8
    //#define OE   9
    //#define LAT 10
    
    // Используем эти выводы, если матрица подключена к Arduino MEGA
    //#define CLK 11
    //#define OE   9
    //#define LAT 10
    
    // Используем эти выводы, если матрица подключена к Piranha ULTRA
    #define CLK 11                                                          // Вывод Arduino, к которому подключён вывод CLK матрицы
    #define OE  12                                                          // Вывод Arduino, к которому подключён вывод OE матрицы
    #define LAT 13                                                          // Вывод 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>                                   // Подключаем библиотеку для работы с матрицей
    
    // Используем эти выводы, если матрица подключена к Arduino UNO
    //#define CLK  8
    //#define OE   9
    //#define LAT 10
    
    // Используем эти выводы, если матрица подключена к Arduino MEGA
    //#define CLK 11
    //#define OE   9
    //#define LAT 10
    
    // Используем эти выводы, если матрица подключена к Piranha ULTRA
    #define CLK 11                                                // Вывод Arduino, к которому подключён вывод CLK матрицы
    #define OE  12                                                // Вывод Arduino, к которому подключён вывод OE матрицы
    #define LAT 13                                                // Вывод 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>                                                       // Подключаем библиотеку для работы с матрицей
    
    // Используем эти выводы, если матрица подключена к Arduino UNO
    //#define CLK  8
    //#define OE   9
    //#define LAT 10
    
    // Используем эти выводы, если матрица подключена к Arduino MEGA
    //#define CLK 11
    //#define OE   9
    //#define LAT 10
    
    // Используем эти выводы, если матрица подключена к Piranha ULTRA
    #define CLK 11                                                                    // Вывод Arduino, к которому подключён вывод CLK матрицы
    #define OE  12                                                                    // Вывод Arduino, к которому подключён вывод OE матрицы
    #define LAT 13                                                                    // Вывод 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, учитывайте это при работе с матрицей.

    На заметку: Если у Вас матрица с драйверами FM6126A, то необходимо использовать библиотеку скаченную с нашего сайта или с нашего репозитория на Github.com, в которую мы добавили инициализацию этих драйверов.

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

    • Если Вы используете матрицу 32х16, тогда закомментируйте строку с константой D, и удалите её в дальнейшем в строке объявления объекта;
    • Если Вы используете матрицу 32х32, тогда удалите из строки объявления объекта значение 64 в конце;
    • Если Вы используете матрицу 64х32, тогда оставьте всё, как есть;
    #include <RGBmatrixPanel.h>                                     // Подключаем библиотеку для работы с матрицей
    
    // Используем эти выводы, если матрица подключена к Arduino UNO
    //#define CLK  8
    //#define OE   9
    //#define LAT 10
    
    // Используем эти выводы, если матрица подключена к Arduino MEGA
    //#define CLK 11
    //#define OE   9
    //#define LAT 10
    
    // Используем эти выводы, если матрица подключена к Piranha ULTRA
    #define CLK 11                                                  // Вывод Arduino, к которому подключён вывод CLK матрицы
    #define OE  12                                                  // Вывод Arduino, к которому подключён вывод OE матрицы
    #define LAT 13                                                  // Вывод 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));    // Устанавливаем цвет отображения - жёлтый, с максимальной яркостью свечения и максимальной насыщенностью цвета

                  Применение:

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

                  Ссылки:

                  Обсуждение