Урок 19: 8x8 Светодиодная Матрица

1. Зачем нужна светодиодная матрица

Светодиодная матрица

8x8 Светодиодная матрица

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

2. Необходимое оборудование

Кол-во

Деталь

1

Плата Arduino UNO

1

8x8 Точечная Матрица

8

Резистор 220 Ом

1

Макетная плата (breadboard)

1

USB Кабель

Несколько перемычек

3. Принцип работы

Светодиодный драйвер MAX7219 можно использовать для управления 7-сегментными дисплеями до 8 цифр, гистограммными дисплеями или 64 отдельными светодиодами. Драйвер взаимодействует с Arduino через SPI, поэтому для управления дисплеем вам нужно всего три провода.

Поскольку MAX7219 может управлять максимум 64 светодиодами, максимальный размер матричного дисплея, который он может управлять, составляет 8×8 пикселей. Однако вы можете объединить несколько драйверов и матриц в единую цепочку и легко управлять дисплеями гораздо большего размера, такими как 8×32, 8×64 или даже больше. Тем не менее, вам нужно всего три провода для управления всеми микросхемами, поэтому вам понадобится очень мало контактов ввода-вывода Arduino.

Примечание

Вы можете нарисовать свой дизайн и вставить его в код, изменяя массивы байтов.

4. Схема подключения

Схема подключения 8x8 светодиодной матрицы
  • DIN на 12 пин Arduino

  • CLK на 11 пин Arduino

  • CS на 10 пин Arduino

5. Пример кода

led_matrix_8x8.ino
//MAX7219  https://github.com/wayoda/LedControl

#include "LedControl.h"
#include "binary.h"
LedControl lc = LedControl(12, 11, 10, 1);
unsigned long delaytime = 1000;
byte zero_f[8] = { 0b00111100,
                   0b01100110,
                   0b01100110,
                   0b01100110,
                   0b01100110,
                   0b01100110,
                   0b01100110,
                   0b00111100
                 };

byte one_f[8] = {0b00011000,
                 0b00111000,
                 0b00011000,
                 0b00011000,
                 0b00011000,
                 0b00011000,
                 0b00011000,
                 0b00011000
                };

void setup() {
  lc.shutdown(0, false);
  lc.setIntensity(0, 8);
  lc.clearDisplay(0);
}

void drawNum() {
  lc.setRow(0, 0, zero_f[0]);
  lc.setRow(0, 1, zero_f[1]);
  lc.setRow(0, 2, zero_f[2]);
  lc.setRow(0, 3, zero_f[3]);
  lc.setRow(0, 4, zero_f[4]);
  lc.setRow(0, 5, zero_f[5]);
  lc.setRow(0, 6, zero_f[6]);
  lc.setRow(0, 7, zero_f[7]);
  delay(delaytime);

  lc.setRow(0, 0, one_f[0]);
  lc.setRow(0, 1, one_f[1]);
  lc.setRow(0, 2, one_f[2]);
  lc.setRow(0, 3, one_f[3]);
  lc.setRow(0, 4, one_f[4]);
  lc.setRow(0, 5, one_f[5]);
  lc.setRow(0, 6, one_f[6]);
  lc.setRow(0, 7, one_f[7]);
  delay(delaytime);
}

void loop() {
  drawNum();
}

6. Результат теста

Загрузите программу на плату, и точечная матрица отобразит 0.

7. Идеи для расширения

  • Нарисуйте свои символы или анимации, изменяя массивы байтов

  • Объедините несколько матриц для создания бегущей строки или больших дисплеев

  • Используйте библиотеку LedControl для динамических эффектов