Обзор светодиодной матрицы 8×8 на MAX7219
При проектировании различных устройств, часто необходимо отображать информацию на дисплее, таких как LCD1602, TFT и OLED, но бывает что необходимость в большом размере дисплеи и как правило они на порядок дороже. Наверное, лучшем решение, воспользоваться светодиодной матрицей 8 x 8, которая включает в себя 64 светодиода, а драйвер MAX7219 позволит управлять всеми ими используя всего 3 вывода, а так же позволяет подключать не сколько модулей в один большой дисплей.
Технический параметры
► Драйвер: MAX7219;
► Тип индикаторов 1088BS: общий катод;
► Количество светодиодов на индикаторе 1088BS: 64;
► Диаметр одного светодиода: 3 мм;
► Цвет светодиодов: красный, синий, зеленый;
► Интерфейс подключения матрицы: SPI;
► Напряжение питания: 5 В;
► Размер матрицы: 32 х 32 х 14 мм;
Общие сведения.
Модуль состоит из двух частей, снизу расположена печатная плата на которой установлена микросхема MAX7219 с небольшой электрическая обвязка, а сверху устанавливается светодиодная матрица 1088BS с общим катодом (32 мм x 32 мм x 8 мм). Матрица 1088BS содержит 16 штыревых выводов, 8 из которых отвечают за ряды, а другие 8 за столбцы, общее количество светодиодов 64 шт.
Давайте подробнее рассмотрим MAX7219. Микросхема способна управлять 64 отдельными светодиодами, используя всего 3 провода для связи с контроллером Arduino, а так же, используя эти же провода подключить несколько MAX7219 в одну большую матрицу.
Для управления 64 светодиодами, микросхема MAX7219 использует всего 16 выводом и одновременно микросхема может включить всего восемь светодиодов. Матрица светодиодов состоит 8 строк и 8 столбцов, таким образом, MAX7219 включает каждый столбец в течение очень короткого периода времени, и в то же время включает каждую строкой. Поэтому, быстро переключение человеческий глазу не замечает, а видит только непрерывный свет.
Подключение светодиодной матрицы 8×8 на MAX7219 к Arduino
Необходимые детали:
► Arduino UNO R3 x 1 шт.
► Светодиодная матрицы 8×8 на MAX7219 x 1 шт.
► Провода DuPont, 2,54 мм, 20 см x 1 шт.
Подключение
В примере используем Arduino UNO R3 и светодиодная матрица на драйвере MAX7219. Подключение не сложное, необходимо пять проводов, первым делом подключаем вывод CLK (MAX7219 ) к выводу 13 (Arduino), вывод CS подключаем к выводу 9 (Arduino), вывод DIN подключаем к выводу 11 (Arduino , затем подключаем питание VCC к +5В и GND к GND. Так же, приведу схему подключения.
Программа №1:
Для работы скетча необходимо библиотека «Adafruit_GFX.h» и «Max72xxPanel.h», который не входят в среду разработки IDE Arduino, дополнительно устанавливаем их, скачать можно в конце статьи.
В первый пример не сложный, будем управлять двумя светодиодами в матрице.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#include <SPI.h> // Подключаем библиотеку SPI #include <Adafruit_GFX.h> // Подключаем библиотеку Adafruit_GFX #include <Max72xxPanel.h> // Подключаем библиотеку Max72xxPanel int pinCS = 9; // Указываем к какому выводу подключен контакт CS int numberOfHorizontalDisplays = 1; // Количество матриц по горизонтали int numberOfVerticalDisplays = 1; // Количество матриц по-вертикали Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays); void setup() { matrix.setIntensity(10); // Задаем яркость от 0 до 15 matrix.setRotation(3); // Направление текста 1,2,3,4 } void loop() { matrix.drawPixel(2, 2, HIGH); // Включаем светодиод matrix.write(); // Вывод всех пикселей на матрицу delay(500); // Пауза matrix.drawPixel(5, 5, HIGH); // Включаем светодиод matrix.write(); // Вывод всех пикселей на матрицу delay(500); // Пауза matrix.drawPixel(5, 5, LOW); // Выключаем светодиод matrix.write(); // Вывод всех пикселей на матрицу delay(500); // Пауза matrix.drawPixel(2, 2, LOW); // Выключаем светодиод matrix.write(); // Вывод всех пикселей на матрицу delay(500); // Пауза matrix.drawPixel(5, 5, LOW); // Выключаем светодиод matrix.write(); // Вывод всех пикселей на матрицу delay(500); // Пауза } |
Описание скетча:
Первым делом, мы подключаем библиотеки «SPI«, «Adafruit_GFX» и «Max72xxPanel«. Далее, мы указываем к какому выводу Arduino подключен контакт «int pinCS» в нашем случае это вывод 9, а так же указываем количество матриц по горизонтали «numberOfHorizontalDisplays» и по вертикали «numberOfVerticalDisplays«, затем передаем все эти данные.
В setup(), указываем яркость «matrix.setIntensity» от 0 до 15, задаем направление текста «matrix.setRotation«, возможные варианты 1, 2, 3 и 4.
В loop(), функцией «drawPixel«, мы указываем что нужно включить светодиод с координатами 2 x 2 и помощью функции «matrix.write()» выводим данные на матрицу.
Программа №2:
Теперь можно приступить ко второму примере, схему менять не нужно. В программной части, изменения коснулись только в функции void loop(), в примере отобразим картинку виде смайла.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
#include <SPI.h> // Подключаем библиотеку SPI #include <Adafruit_GFX.h> // Подключаем библиотеку Adafruit_GFX #include <Max72xxPanel.h> // Подключаем библиотеку Max72xxPanel int pinCS = 9; // Указываем к какому выводу подключен контакт CS int numberOfHorizontalDisplays = 1; // Количество матриц по горизонтали int numberOfVerticalDisplays = 1; // Количество матриц по-вертикали Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays); void setup() { matrix.setIntensity(10); // Задаем яркость от 0 до 15 matrix.setRotation(3); // Направление текста 1,2,3,4 } void loop() { const byte data[8] = { // Создаем массив "Смайл" 0b00111100, // #### 0b01000010, // # # 0b10100101, // # # # # 0b10000001, // # # 0b10100101, // # # # # 0b10011001, // # ## # 0b01000010, // # # 0b00111100 }; // #### matrix.fillScreen(LOW); // Обнуление матрицы for (int y = 0; y < 8; y++ ) { // Передача массива for (int x = 0; x < 8; x++ ) { matrix.drawPixel(x, y, data[y] & (1<<x)); } } matrix.write(); // Вывод всех пикселей на матрицу } |
Описание скетча:
Так как программа изменилась только в функции loop(), ее и опишу, первое что мы делаем это создаем массив data.
1 2 3 4 5 6 7 8 9 |
const byte data[8] = { 0b00111100, 0b01000010, 0b10100101, 0b10000001, 0b10100101, 0b10011001, 0b01000010, 0b00111100 }; |
Далее мы обнуляем дисплей и передаем данные с массива на дисплей, затем мы вызываем функцию write.
1 2 3 4 5 6 7 8 9 10 |
matrix.fillScreen(LOW); // Обнуление матрицы for (int y = 0; y < 8; y++ ) { // Передача массива for (int x = 0; x < 8; x++ ) { matrix.drawPixel(x, y, data[y] & (1<<x)); } } matrix.write(); // Вывод всех пикселей на матрицу } |
Программа №3:
В третьем примере, подключим матрицу из шести дисплеев 8 x 8 и сделаем бегущий строку.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
#include <SPI.h> // Подключаем библиотеку SPI #include <Adafruit_GFX.h> // Подключаем библиотеку Adafruit_GFX #include <Max72xxPanel.h> // Подключаем библиотеку Max72xxPanel int pinCS = 9; // Указываем к какому выводу подключен контакт CS int numberOfHorizontalDisplays = 1; // Количество матриц по горизонтали int numberOfVerticalDisplays = 6; // Количество матриц по-вертикали Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays); String tape = "RobotChip"; // Отображаемый текст int wait = 50; // Скорость int spacer = 1; // Расстояние между буквами int width = 5 + spacer; // Размер шрифта void setup() { matrix.setIntensity(5); // Задаем яркость от 0 до 15 matrix.setRotation(3); // Направление текста 1,2,3,4 } void loop() { for ( int i = 0 ; i < width * tape.length() + matrix.width() - 1 - spacer; i++ ) { matrix.fillScreen(LOW); // Обнуление матрицы int letter = i / width; int x = (matrix.width() - 1) - i % width; int y = (matrix.height() - 8) / 2; while ( x + width - spacer >= 0 && letter >= 0 ) { if ( letter < tape.length() ) { matrix.drawChar(x, y, tape[letter], HIGH, LOW, 1); } letter--; x -= width; } matrix.write(); // Вывод всех пикселей на матрицу delay(wait); } } |
Ссылки
Библиотека Adafruit_GFX
Библиотека Max72xxPanel
Купить на Aliexpress
Контроллер Arduino UNO R3 на CH340G
Контроллер Arduino UNO R3 на Atmega16U2
Модуль светодиодной матрицы 8×8 на MAX7219
Комплект проводов DuPont, 2,54 мм, 20 см
Купить в Самаре и области
Контроллер Arduino UNO R3 на CH340G
Контроллер Arduino UNO R3 на Atmega16U2
Модуль светодиодной матрицы 8×8 на MAX7219
Провода DuPont, 2,54 мм, 20 см
Скажите пожалуйста как на основе этих примеров сделать не бегущую строку а бегущий массив. И например что бы он при этом еще бегал или останавливался на какое то время. То есть нужно выполнить определенную анимацию
Добрый день, подскажите как прозвонить микросхему мах 7219
Библиотека Max72xxPanel не работает в Arduino IDE 1.8.15
Выдаёт сообщение при компиляции:
#
Adafruit_SPIDevice.cpp:79:19: error: ‘nullptr’ was not declared in this scope
#
Нужно подключить библиотеку Adafruit Bus IO Library
можете подсказать как выводить кирилицу?