#16. Подключаем матрицу Max72xx (MAX7219) к Arduino. Простая анимация.

.#16. Подключаем матрицу Max72xx (MAX7219) к Arduino. Простая анимация.

Сегодня в уроке покажу как подключить к Arduino светодиодную матрицу на MAX7219. Матрица состоит из 8 рядов и 8 столбцов, всего 64 светодиода, которыми управляет драйвер MAX7219 . В этом Arduino уроке буду использовать модуль из 4 матриц на базе драйвера MAX7219 , но это все те же матрицы, просто установлены в модуль с 4 драйверами. В дальнейшем буду подключать и 16, и 32, и, возможно, 64 матрицы. А пока, в рамках данного урока, научу управлять 1 матрицей и поиграю с 4 матрицами данного модуля.

 В этом Arduino уроке буду использовать модуль из 4 матриц на базе драйвера MAX7219

Технические параметры матрицы 8х8.

  • Драйвер: MAX7219;
  • Количество светодиодов на индикаторе 1088BS: 64;
  • Тип индикаторов 1088BS: общий катод;
  • Цвет светодиодов: красный;
  • Диаметр одного светодиода: 3 мм;
  • Интерфейс подключения матрицы: SPI;
  • Напряжение питания: 5 В;
  • Размер матрицы: 32 х 32 х 14 мм;

Как устроена матрица 8х8

Как указывалось ранее, эта матрица имеет 8 столбцов и 8 строк. Каждый светодиод индексируется от 0 до 7. Вот рисунок для лучшего понимания:

Технические параметры матрицы 8х8 на базе драйвера MAX7219

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

Например, если вы хотите отобразить смайлик, вот что вам нужно сделать:

Например, если вы хотите отобразить смайлик, на матрицу MAX7219

Подключение светодиодной матрицы 8×8 на MAX7219 к Arduino.

Для выполнения Arduino урока нам понадобится :

Для подключения необходимо пять проводов, которые чаше всего идут в комплекте с матрицей. Подключаем вывод CLK (MAX7219 ) к выводу 13 (Arduino), вывод CS подключаем к выводу 9, вывод DIN подключаем к выводу 11. Питание подключается VCC к +5В и GND к GND.

Подключение матрицы MAX7219 к Arduino

Подключение матрицы MAX7219 к Arduino NANO аналогично.

Подключение матрицы MAX7219 к Arduino NANO

Схема подключения модуля с 4 матрицами ни чем не отличается. Все подключается к тем же пинам Arduino UNO .

Схема подключения модуля с 4 матрицами

Схема подключения модуля с 4 матрицамиMAX7219 к Arduino NANO будет вот такой.

Схема подключения модуля с 4 матрицамиMAX7219 к Arduino NANO

Установка библиотек Adafruit_GFX и Max72xxPanel.

Существует несколько библиотек, доступных для управления матрицей на драйвере MAX7219. В этом уроке я буду использовать две библиотеки: Adafruit_GFX и Max72xxPanel.

Для установки этих библиотек выполните следующие действия.
1. Откройте Arduino IDE и перейдите в раздел Скетч > Подключить библиотеку > управление библиотеками .

Должен открыться менеджер библиотек.

2. Укажите “ GFX” в поле поиска, выберете из списка и установите библиотеку от Adafruit GFX.

Аналогично установите вторую библиотеку, для этого в поле поиска укажите “GFX”

3. Библиотеку Max72xxPanel можно установить из zip архива. Для этого скачайте архив с библиотекой отсюда или внизу урока из раздела «Файлы для скачивания». В Arduino IDE перейдите в раздел Скетч > Подключить библиотеку > Добавить . ZIP библиотеку. Выбираете архив с библиотекой.

 Библиотеку Max72xxPanel можно установить из zip архива

4. После установки библиотеки перезагрузите среду разработки Arduino.


Примеры кода работы с матрицей MAX7219

Пример 1. Вывод двух точек на матрицу MAX7219 в среде Arduino IDE.

Вывод двух точек на матрицу MAX7219 в среде Arduino IDE.

Данный пример достаточно прост и не многим отличается от включения светодиода.

#include <SPI.h>                             // Подключаем библиотеку SPI
#include <Adafruit_GFX.h>                    // Подключаем библиотеку Adafruit_GFX
#include <Max72xxPanel.h>                    // Подключаем библиотеку Max72xxPanel
int pinCS = 9;                               // Указываем к какому выводу подключен контакт CS
int numberOfHorizontalDisplays = 1;          // Количество матриц по горизонтали
int numberOfVerticalDisplays = 4;            // Количество матриц по-вертикали
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
void setup() {
  matrix.setIntensity(5);                    // Задаем яркость от 0 до 15
  matrix.setRotation(3);                      // Направление текста 1,2,3,4
}
void loop() {
  matrix.drawPixel(3, 3, HIGH);            // Включаем светодиод
  matrix.write();                          // Вывод всех пикселей на матрицу
  delay(500);                              // Пауза
  matrix.drawPixel(6, 7, HIGH);            // Включаем светодиод
  matrix.write();                          // Вывод всех пикселей на матрицу
  delay(500);                              // Пауза
  matrix.drawPixel(6, 7, LOW);             // Выключаем светодиод
  matrix.write();                          // Вывод всех пикселей на матрицу
  delay(500);                              // Пауза
  matrix.drawPixel(3, 3, LOW);             // Выключаем светодиод
  matrix.write();                          // Вывод всех пикселей на матрицу
  delay(500);                              // Пауза
  matrix.drawPixel(6, 7, LOW);             // Выключаем светодиод
  matrix.write();                          // Вывод всех пикселей на матрицу
  delay(500);                              // Пауза
}

Для работы вам нужно подключить библиотеки, определить пины подключения, после чего, используя библиотеку Max72xxPanel, укажите координаты светодиода, который вы планируете включать или выключать. Точки могут быть любыми и не ограничиваться координатами одной матрицы 8х8.

Пример 2 . Построчное заполнение матрицы MAX7219.

Построчное заполнение матрицы MAX7219 в среде Arduino IDE.

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

#include <SPI.h>                             // Подключаем библиотеку SPI
#include <Adafruit_GFX.h>                    // Подключаем библиотеку Adafruit_GFX
#include <Max72xxPanel.h>                    // Подключаем библиотеку Max72xxPanel
int pinCS = 9;                               // Указываем к какому выводу подключен контакт CS
int numberOfHorizontalDisplays = 1;          // Количество матриц по горизонтали
int numberOfVerticalDisplays = 4;            // Количество матриц по-вертикали
int y = 0;
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
void setup() {
  matrix.setIntensity(5);                    // Задаем яркость от 0 до 15
  matrix.setRotation(3);                      // Направление текста 1,2,3,4
}
void loop() {
  matrix.fillScreen(LOW);                       // Обнуление матрицы
  for (int y = 0; y < 8; y++ ) {
    for (int x = 0; x < 32; x++ ) { // Передача массива
      matrix.drawPixel(x, y, HIGH);
      matrix.write();
      delay(200);
    }
  }
}


Пример 3 . Вывод линий по диагонали матрицы MAX7219.

Вывод линий по диагонали матрицы MAX7219 в среде Arduino IDE.

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

#include <SPI.h>                             // Подключаем библиотеку SPI
#include <Adafruit_GFX.h>                    // Подключаем библиотеку Adafruit_GFX
#include <Max72xxPanel.h>                    // Подключаем библиотеку Max72xxPanel
int pinCS = 9;                               // Указываем к какому выводу подключен контакт CS
int numberOfHorizontalDisplays = 1;          // Количество матриц по горизонтали
int numberOfVerticalDisplays = 4;            // Количество матриц по-вертикали
int y = 0;
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
void setup() {
  matrix.setIntensity(5);                    // Задаем яркость от 0 до 15
  matrix.setRotation(3);                      // Направление текста 1,2,3,4
}
void loop() {
  matrix.fillScreen(LOW);                       // Обнуление матрицы
    for (int x = 0; x < 32; x++ ) { // Передача массива
      matrix.drawPixel(x, y, HIGH);
      matrix.write();
      delay(200);
      y++;
      if (y>=8)
        y=0;
    }
}

Пример 4 . Рисуем квадрат по контуру матрицы MAX7219.


Рисуем квадрат по контуру матрицы MAX7219 в среде Arduino IDE.

Такой вариант вы, наверное, уже видели на табло с бегущей строкой. Реализуется данный эффект достаточно просто. Попиксельно заполняются нужные строки по горизонтали и по вертикали, используя координаты начальной и конечной точки, просто рисуем линии.

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

#include <SPI.h>                             // Подключаем библиотеку SPI
#include <Adafruit_GFX.h>                    // Подключаем библиотеку Adafruit_GFX
#include <Max72xxPanel.h>                    // Подключаем библиотеку Max72xxPanel
int pinCS = 9;                               // Указываем к какому выводу подключен контакт CS
int numberOfHorizontalDisplays = 1;          // Количество матриц по горизонтали
int numberOfVerticalDisplays = 4;            // Количество матриц по-вертикали
int x = 0;
int y = 0;
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
void setup() {
  matrix.setIntensity(5);                    // Задаем яркость от 0 до 15
  matrix.setRotation(3);                      // Направление текста 1,2,3,4
}
void loop() {
  matrix.fillScreen(LOW);                       // Обнуление матрицы
  y = 0;
  for (int x = 0; x < 32; x++ ) { // Передача массива
    matrix.drawPixel(x, y, HIGH);
    matrix.write();
    delay(50);
  }
  x = 31;
  for (int y = 1; y < 8; y++ ) {
    matrix.drawPixel(x, y, HIGH);
    matrix.write();
    delay(50);
  }
  y = 7;
  for (int x = 31; x > 0; x-- ) { // Передача массива
    matrix.drawPixel(x, y, HIGH);
    matrix.write();
    delay(50);
  }
  x = 0;
  for (int y = 8; y > 0; y-- ) {
    matrix.drawPixel(x, y, HIGH);
    matrix.write();
    delay(50);
  }
  y = 0;
  for (int x = 0; x < 32; x++ ) { // Передача массива
    matrix.drawPixel(x, y, LOW);
    matrix.write();
    delay(50);
  }
  x = 31;
  for (int y = 1; y < 8; y++ ) {
    matrix.drawPixel(x, y, LOW);
    matrix.write();
    delay(50);
  }
  y = 7;
  for (int x = 31; x > 0; x-- ) { // Передача массива
    matrix.drawPixel(x, y, LOW);
    matrix.write();
    delay(50);
  }
  x = 0;
  for (int y = 8; y > 0; y-- ) {
    matrix.drawPixel(x, y, LOW);
    matrix.write();
    delay(50);
  }
}

Код для урока не оптимизирован. Можно сделать отдельно одну функцию, которая по координатам будет рисовать линии, и вторую, которая будет удалять линии, также по указанным координатам.


Пример 5 . Мигающий прямоугольник контура матрицы MAX7219.

Мигающий прямоугольник контура матрицы MAX7219 в среде Arduino IDE.

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

#include <SPI.h>                             // Подключаем библиотеку SPI
#include <Adafruit_GFX.h>                    // Подключаем библиотеку Adafruit_GFX
#include <Max72xxPanel.h>                    // Подключаем библиотеку Max72xxPanel
int pinCS = 9;                               // Указываем к какому выводу подключен контакт CS
int numberOfHorizontalDisplays = 1;          // Количество матриц по горизонтали
int numberOfVerticalDisplays = 4;            // Количество матриц по-вертикали
int x = 0;
int y = 0;
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
void setup() {
  matrix.setIntensity(5);                    // Задаем яркость от 0 до 15
  matrix.setRotation(3);                      // Направление текста 1,2,3,4
}
void loop() {
  matrix.fillScreen(LOW);                       // Обнуление матрицы
  delay(500);
  y = 0;
  for (int x = 0; x < 32; x++ ) { // 
    matrix.drawPixel(x, y, HIGH);
  }
  x = 31;
  for (int y = 1; y < 8; y++ ) {
    matrix.drawPixel(x, y, HIGH);
  }
  y = 7;
  for (int x = 31; x > 0; x-- ) { // 
    matrix.drawPixel(x, y, HIGH);
  }
  x = 0;
  for (int y = 8; y > 0; y-- ) {
    matrix.drawPixel(x, y, HIGH);
  }
  matrix.write();
  delay(500);
}

Пример 6 . Вывод графических элементов на MAX7219 в среде Arduino IDE.

Вывод графических элементов на MAX7219 в среде Arduino IDE.

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

#include <SPI.h>                             // Подключаем библиотеку SPI
#include <Adafruit_GFX.h>                    // Подключаем библиотеку Adafruit_GFX
#include <Max72xxPanel.h>                    // Подключаем библиотеку Max72xxPanel
int pinCS = 9;                               // Указываем к какому выводу подключен контакт CS
int numberOfHorizontalDisplays = 1;          // Количество матриц по горизонтали
int numberOfVerticalDisplays = 4;            // Количество матриц по-вертикали
int x = 0;
int y = 0;
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
void setup() {
  matrix.setIntensity(5);                    // Задаем яркость от 0 до 15
  matrix.setRotation(3);                      // Направление текста 1,2,3,4
}
void loop() {
  const byte hf[8] = {                    // Создаем массив "Смайл"
    0b00111100,                               //    ####
    0b01000010,                               //   #    #
    0b10100101,                               //  # #  # #
    0b10000001,                               //  #      #
    0b10100101,                               //  # #  # #
    0b10011001,                               //  #  ##  #
    0b01000010,                               //   #    #
    0b00111100                                //    ####
  };                                          
  byte nf[8] = {B00111100, B01000010, B10100101, B10000001, B10111101, B10000001, B01000010, B00111100};
  byte sf[8] = {B00111100, B01000010, B10100101, B10000001, B10011001, B10100101, B01000010, B00111100};
  matrix.fillScreen(LOW);                       // Обнуление матрицы
  for (int y = 0; y < 8; y++ ) {            // Передача массива
    for (int x = 0; x < 8; x++ ) {
      matrix.drawPixel(x, y, hf[y] & (1 << x));
    }
  }
  matrix.write();
  delay(1000);
  for (int y = 0; y < 8; y++ ) {            // Передача массива
    for (int x = 0; x < 8; x++ ) {
      matrix.drawPixel(x, y, nf[y] & (1 << x));
    }
  }
  matrix.write();
  delay(1000);
  for (int y = 0; y < 8; y++ ) {            // Передача массива
    for (int x = 0; x < 8; x++ ) {
      matrix.drawPixel(x, y, sf[y] & (1 << x));
    }
  }
  matrix.write();
  delay(1000);
}

Код к уроку написан максимально наглядным, но не оптимизированным. Вывод на матрицу можно выделить в отдельную функцию, и передавать в данную функцию нужный массив.

Для того чтобы выводить графические элементы на матрицу можно написать макрос для Excel или воспользоваться программой. При написании данного урока случайно нашел вот такую программу PixelToMatrix, которая облегчает рисование на матрице 8х8.

 программу PixelToMatrix

Скачать программу можно внизу урока из раздела « Файлы для скачивания»

Итоги урока.

Как видно из примеров, выводить информацию на матрицу достаточно просто. В следующем уроке покажу как выводит текст на Русском языке на MAX7219 в среде Arduino IDE .

 как выводит текст на Русском языке на MAX7219 в среде Arduino IDE

Не забывайте оставлять ваше мнение и предложения в комментариях.


Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке.

Понравилась статья? Поделитесь ею с друзьями:

Файлы для скачивания

Программа PixelToMatrix Программа PixelToMatrix.zip8 Kb 3119 Скачать
Библиотека Max72xxPanel Библиотека Max72xxPanel.zip46 Kb 3703 Скачать
Вернуться в раздел: Уроки Arduino: Подключение датчиков и модулей к Arduino Дата публикации 13 января , 2020

Комментарии

Ваше Имя*
Войдите или Зарегистрируйтесь И Вы сможете общаться на форуме и оставлять комментарии без капчи.

kvout
#4 Гость: kvout (12 ноября, 2020 в 19:45)

Если у вас выскакивает ошибка

<code>fatal error: Adafruit_I2CDevice.h: No such file or directory #include <Adafruit_I2CDevice.h></code>
Copy

установите библиотеку Adafruit BusIO

Николай
#3 Гость: Николай (29 августа, 2020 в 06:10)

Еле нашёл доп файлы, чтобы библиотека не выдавала ошибки и всё заработало.. Недостающие файлы найдёте в сети..

Dima
#2 Гость: Dima (30 апреля, 2020 в 19:33)

Можете помочь? Там есть код со смайликом на первой матрице. А как включить следущую матрицу?

alex
#1 alex (13 января, 2020 в 12:29)
 Thank you !

Cлучайные товары

Посмотреть товар в Магазине »

Мы в соц сетях

Подпишись на канал Telegram

Portal-PK (Портал ПК) © 2015 - 2024
Разработка проектов
AT Block
DWIN Box