MyTetra Share
Делитесь знаниями!
как подключить к Arduino светодиодную матрицу на MAX7219
Время создания: 09.09.2023 12:12
Автор: alensav
Текстовые метки: max7219
Раздел: Modul MAX 7219
Запись: alensav/MyTetra2/main/base/1694250733ooxda64pwi/text.html на raw.githubusercontent.com

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

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

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

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

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

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

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

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

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

  • ARDUINO NANO. Купить можно на AliExpress  или в России .
  • Модуль MAX7219. Купить можно на AliExpress  или в России .
  • Провод DuPont. Купить можно на AliExpress  или в России .
  • Плата макетная беспаечная 55х82х8.5 мм. Купить можно на AliExpress  или в России .

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

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

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

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

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

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

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

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

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

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

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


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

Пример 1. Вывод двух точек на матрицу 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); // Пауза

}


Copy

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

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

Используя 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);

}

}

}


Copy


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

Используя предыдущий пример немного изменю код. Предлагаю не заполнять построчно, а сделать перемещение по оси 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;

}

}


Copy

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


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

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

#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);

}

}


Copy

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


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

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

#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);

}


Copy

Пример 6 Вывод графических элементов на 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);

}


Copy

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

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

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

Итоги урока.

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

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


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

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

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

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

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

Скачивая материал, я соглашаюсь с Правилами скачивания и использования материалов .

Программа PixelToMatrix.zip

8 Kb

 2874

Скачать

Библиотека Max72xxPanel.zip

46 Kb

 3407

Скачать

  Вернуться в раздел:  Уроки Arduino: Подключение датчиков и модулей к Arduino Дата публикации 13 января , 2020

Читайте также

Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования