====== Модуль светодиодной матрицы ======
===== Описание =====
Модуль светодиодной матрицы предназначен для отображения символьной и графической информации. В основе модуля лежит светодиодная матрица из 64 красных 3 мм светодиодов. В зависимости от того какое количество светодиодов и в какой последовательности загорается - можно вывести практически любую информацию: от простейших символов, букв и цифр, до более сложных графических элементов, в том числе динамических. Особенностью светодиодных матриц, в отличие от дисплеев, является низкий уровень энергопотребления (максимально 70 мА при одновременном использовании всех светодиодов).

Для управления матрицей используется микросхема MAX7219. С ее помощью для управления 64 светодиодами потребуется всего три цифровых вывода контроллера. Кроме того модули можно объединять друг с другом используя все те же 3 вывода контроллера. Объединив несколько модулей - можно получить светодиодную панель или бегущую строку практически любых размеров.

Для удобства крепления на плате предусмотрены 4 монтажных отверстия под винты М3.

==== Технические характеристики ====
  * Рабочее напряжение: 3,3-5 В
  * Максимальный потребляемый ток: 70 мА
  * Размер матрицы: 32х32 мм
  * Диаметр светодиода: 3 мм

==== Размеры ====
  * Габаритные размеры Д х Ш х В: 46 х 33 х 9 мм

==== Подключение ====
Модуль индикатора подключается к контроллеру с помощью следующих выводов:
  * **+** - соединяется с пином питания контроллера (5V или 3,3V) 
  * **-** - соединяется с пином контроллера GND (земля)
  * **CLK** - соединяется с цифровым пином контроллера
  * **LD** - соединяется с цифровым пином контроллера
  * **DIN** - соединяется с цифровым пином контроллера
  * **DO** - предназначен для соединения нескольких модулей друг с другом и подключается к выводу DIN следующего модуля
==== Файлы для загрузки ====
  * [[http://files.smartelements.ru/datasheet/MAX7219.pdf|Даташит на MAX7219]]
  * [[http://files.smartelements.ru/know_libs/LedControl.zip|Библиотека для Arduino]]

==== Буквы в шестнадцатиричном представлении ====

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

++++ Список символов и их представления (латинский алфавит)| 

=== Латинские заглавные буквы ===


^ Буква  ^ Представление  ^
| A|0x6666667e66663c00|
| B|0x3e66663e66663e00|
| C|0x3c66060606663c00|
| D|0x3e66666666663e00|
| E|0x7e06063e06067e00|
| F|0x0606063e06067e00|
| G|0x3c66760606663c00|
| H|0x6666667e66666600|
| I|0x3c18181818183c00|
| J|0x1c36363030307800|
| K|0x66361e0e1e366600|
| L|0x7e06060606060600|
| M|0xc6c6c6d6feeec600|
| N|0xc6c6e6f6decec600|
| O|0x3c66666666663c00|
| P|0x06063e6666663e00|
| Q|0x603c766666663c00|
| R|0x66361e3e66663e00|
| S|0x3c66603c06663c00|
| T|0x18181818185a7e00|
| U|0x7c66666666666600|
| V|0x183c666666666600|
| W|0xc6eefed6c6c6c600|
| X|0xc6c66c386cc6c600|
| Y|0x1818183c66666600|
| Z|0x7e060c1830607e00|

=== Латинские строчные буквы ===

^ Буква  ^ Представление  ^
| a |0x7c667c603c000000 |
| b |0x3e66663e06060600 |
| c |0x3c6606663c000000 |
| d |0x7c66667c60606000 |
| e |0x3c067e663c000000 |
| f |0x0c0c3e0c0c6c3800 |
| g |0x3c607c66667c0000 |
| h |0x6666663e06060600 |
| i |0x3c18181800180000 |
| j |0x1c36363030003000 |
| k |0x66361e3666060600 |
| l |0x1818181818181800 |
| m |0xd6d6feeec6000000 |
| n |0x6666667e3e000000 |
| o |0x3c6666663c000000 |
| p |0x06063e66663e0000 |
| q |0xf0b03c36363c0000 |
| r |0x060666663e000000 |
| s |0x3e403c027c000000 |
| t |0x1818187e18180000 |
| u |0x7c66666666000000 |
| v |0x183c666600000000 |
| w |0x7cd6d6d6c6000000 |
| x |0x663c183c66000000 |
| y |0x3c607c6666000000 |
| z |0x3c0c18303c000000 |

++++

++++ Список символов и их представления (русский алфавит)| 

===  Русские заглавные буквы ===


^ Буква  ^ Представление  ^
| А | 0x6666667e66663c00 |
| Б | 0x3e66663e06067e00 |
| В | 0x3e66663e66663e00 |
| Г | 0x0606060606667e00 |
| Д | 0xc6c6fe6c6c6c7c00 |
| Е | 0x7e06063e06067e00 |
| Ё | 0x7e06063e06067e24 |
| Ж | 0xd6d67c387cd6d600 |
| З | 0x3c66603c60663c00 |
| И | 0xc6c6cedef6e6c600 |
| Й | 0xc6c6cedef6e6d610 |
| К | 0x66361e0e1e366600 |
| Л | 0x66666666663c1800 |
| М | 0xc6c6c6d6feeec600 |
| Н | 0x6666667e66666600 |
| О | 0x3c66666666663c00 |
| П | 0x6666666666667e00 |
| Р | 0x06063e6666663e00 |
| С | 0x3c66060606663c00 |
| Т | 0x18181818185a7e00 |
| У | 0x3c66607c66666600 |
| Ф | 0x107cd6d6d6d67c00 |
| Х | 0xc6c66c386cc6c600 |
| Ц | 0xfc66666666666600 |
| Ч | 0x60607c6666666600 |
| Ш | 0xfed6d6d6c6c6c600 |
| Щ | 0xffeb6b6b6b6b6300 |
| Ъ | 0x3e66663e06060700 |
| Ы | 0xcfdbdbcfc3c3c300 |
| Ь | 0x3e66663e06060600 |
| Э | 0x3c66607c60663c00 |
| Ю | 0x73dbdbdfdfdb7300 |
| Я | 0x666c787c66667c00 |

===  Русские строчные буквы ===

^ Буква  ^ Представление  ^
| а | 0x7c667c603c000000 |
| б | 0x3c66663e06667c00 |
| в | 0x3c66663e66663c00 |
| г | 0x060606667e000000 |
| д | 0x3c66667c60663c00 |
| е | 0x3c067e663c000000 |
| ё | 0x3c067e663c006c00 |
| ж | 0xd67c387cd6000000 |
| з | 0x386c6038606c3800 |
| и | 0x7c66666666000000 |
| й | 0x7c66666666001800 |
| к | 0x66361e3666000000 |
| л | 0x6666667c78000000 |
| м | 0xd6d6feeec6000000 |
| н | 0x667e666666000000 |
| о | 0x3c6666663c000000 |
| п | 0x666666667e000000 |
| р | 0x06063e66663e0000 |
| с | 0x3c6606663c000000 |
| т | 0x181818187e000000 |
| у | 0x3c607c6666660000 |
| ф | 0x7cd6d6d6d67c0000 |
| х | 0x663c183c66000000 |
| ц | 0xfc66666666000000 |
| ч | 0x607c666666660000 |
| ш | 0xfed6d6d6c6000000 |
| щ | 0xff6b6b6b63000000 |
| ъ | 0x3c6c6c3c0d0f0000 |
| ы | 0xcfdbdbcfc3c30000 |
| ь | 0x3c6c6c3c0c0c0000 |
| э | 0x3c6678663c000000 |
| ю | 0x73dbdfdfdb730000 |
| я | 0x666c7866667c0000 |


++++
===== Примеры подключения и использования =====
==== Пример 1. Любовь ====

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

**Что нужно**
^ Что нужно  ^ Сколько  ^
| [[https://smartelements.ru/collection/kontrollery/product/kontroller-smart-uno|Контроллер Smart Uno]]           |    1      |
| [[|Модуль светодиодной матрицы]]           |    1      |
| [[https://smartelements.ru/collection/provoda-i-kabeli/product/nabor-provodov-20-sht-20sm-papa-mama|Провода папа-мама]]  |    5      |

**Схема подключения**
{{ :main:disp:matr_8x8_uno.png?nolink |}}

**Скетч для загрузки**
<file Arduino>
#include "LedControl.h" // подключение библиотеки для работы с дисплеем
 
/*
 * Создание объекта для работы с дисплеем с параметрами:
 * - вывод 12 - вывод DIN
 * - вывод 11 - вывод CLK
 * - вывод 10 - вывод LD
 */
LedControl matrix = LedControl(12, 11, 10); 
 
unsigned long delaytime=250; // время ожидания между выводом символов на дисплей
 
void setup() {
  /*
   * При старте микросхема MAX7219 находится в режиме
   * пониженного энергопотребления,
   * поэтому первым делом нам нужно вывести её 
   * из этого режима.
   */
  matrix.shutdown(0,false);
  matrix.setIntensity(0,8); // установим яркость дисплея на 8 - среднее значение (возможно установить от 0 до 15)
  matrix.clearDisplay(0); // очистка дисплея
}
 

/*
 * Эта функция зажигает все светодиоды матрицы поочерёдно,
 * мигая каждым следующим перед тем как его зажечь.
*/
void single() {
  for (int row = 0; row < 8; row++) { // цикл по строкам
    for (int col = 0; col < 8; col++) { // цикл по колонкам
      delay(delaytime); // задержка
      matrix.setLed(0, row, col, true); // зажечь ореденой светодиод
      delay(delaytime); // задержка
      for (int i = 0; i < 3; i++) { // три раза мигунть и оставить включенным светодиод
        matrix.setLed(0, row, col, false);
        delay(delaytime);
        matrix.setLed(0, row, col, true);
        delay(delaytime);
      }
    }
  }
}

/*
 * Функция отображает переданную матрицу 
 * светодиодов 8 * 8
 */
void display_matrix(byte matr[8][8]) {
  
  for(int col = 0; col < 8; col++)  // цикл по колонкам
  {  
    for(int row = 0; row < 8; row++)  // цикл по строкам
    {  
        matrix.setLed(0, row, col, matr[row][col]); // отобразить статус светодиода
    }  
    delay(1);  // задержка перед очередной колонкой
  }  
  delay(delaytime); // задержкать выведенное изображение
  matrix.clearDisplay(0); // очистить дисплей
}

/*
 * Функция мигает символом сердца на дисплее
 */
void love() {
  
  byte biglove[8][8] =     // изображение большого сердца
  {
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 1, 1, 0, 0, 1, 1, 0,
    1, 1, 1, 1, 1, 1, 1, 1,
    1, 1, 1, 1, 1, 1, 1, 1,
    1, 1, 1, 1, 1, 1, 1, 1,
    0, 1, 1, 1, 1, 1, 1, 0,
    0, 0, 1, 1, 1, 1, 0, 0,
    0, 0, 0, 1, 1, 0, 0, 0,
  };

  byte smalllove[8][8] =      // изображение маленького сердца
  {
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 1, 0, 0, 1, 0, 0,
    0, 1, 1, 1, 1, 1, 1, 0,
    0, 1, 1, 1, 1, 1, 1, 0,
    0, 0, 1, 1, 1, 1, 0, 0,
    0, 0, 0, 1, 1, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
  };
  
  for (int i = 0; i < 10; i++) { // поочередно вывести изображение сердец
    display_matrix(biglove);
    display_matrix(smalllove);
  }
}

void loop() {
  love(); // помигать сердцем
  single(); // поочередно зажечь все точки на дисплее
}
</file>

==== Пример 2. SmartElements ====

**Описание** В примере демонстрируется вывод надписи SmartElements по буквам.

**Что нужно**
^ Что нужно  ^ Сколько  ^
| [[https://smartelements.ru/collection/kontrollery/product/kontroller-smart-uno|Контроллер Smart Uno]]           |    1      |
| [[|Модуль светодиодной матрицы]]           |    1      |
| [[https://smartelements.ru/collection/provoda-i-kabeli/product/nabor-provodov-20-sht-20sm-papa-mama|Провода папа-мама]]  |    5      |

**Схема подключения**
{{ :main:disp:matr_8x8_uno.png?nolink |}}

**Скетч для загрузки**
<file Arduino>
#include "LedControl.h" // подключение библиотеки для работы с дисплеем

/*
   Создание объекта для работы с дисплеем с параметрами:
   - вывод 12 - вывод DIN
   - вывод 11 - вывод CLK
   - вывод 10 - вывод LD
*/
LedControl matrix = LedControl(12, 11, 10);

unsigned long delaytime = 500; // время ожидания между выводом символов на дисплей

const uint64_t SMARTELEMENTS[] = {
  0x3c66603c06663c00, //S
  0xd6d6feeec6000000, //m
  0x7c667c603c000000, //a
  0x060666663e000000, //r
  0x1818187e18180000, //t
  0x7e06063e06067e00, //E
  0x1818181818181800, //l
  0x3c067e663c000000, //e
  0xd6d6feeec6000000, //m
  0x3c067e663c000000, //e
  0x6666667e3e000000, //n
  0x1818187e18180000, //t
  0x3e403c027c000000, //s
  0x0000000000000000  //пустое значение
};


void setup() {
  /*
     При старте микросхема MAX7219 находится в режиме
     пониженного энергопотребления,
     поэтому первым делом нам нужно вывести её
     из этого режима.
  */
  matrix.shutdown(0, false);
  matrix.setIntensity(0, 8); // установим яркость дисплея на 8 - среднее значение (возможно установить от 0 до 15)
  matrix.clearDisplay(0); // очистка дисплея
}

/*
 * Функция отображает шестнадцатиричное приедставление
 * на светодиодной матрице
*/
void displayImage(uint64_t image) {

  for (int i = 0; i < 8; i++) {
    byte row = (image >> i * 8) & 0xFF;
    for (int j = 0; j < 8; j++) {
      matrix.setLed(0, i, j, bitRead(row, j));
    }
  }

}

/*
 * Функция отображает символы из массива 
 */
void display_SmartElements() {
  int smel_len = sizeof(SMARTELEMENTS) / 8;

  for (int i = 0; i < smel_len; i++) {
    displayImage(SMARTELEMENTS[i]);
    delay(delaytime);
  }

}

void loop() {
  display_SmartElements();
}
</file>

==== Пример 3. УмныеЭлементы ====

**Описание** В примере демонстрируется вывод надписи УмныеЭлементы по буквам.

**Что нужно**
^ Что нужно  ^ Сколько  ^
| [[https://smartelements.ru/collection/kontrollery/product/kontroller-smart-uno|Контроллер Smart Uno]]           |    1      |
| [[|Модуль светодиодной матрицы]]           |    1      |
| [[https://smartelements.ru/collection/provoda-i-kabeli/product/nabor-provodov-20-sht-20sm-papa-mama|Провода папа-мама]]  |    5      |

**Схема подключения**
{{ :main:disp:matr_8x8_uno.png?nolink |}}

**Скетч для загрузки**
<file Arduino>
#include "LedControl.h" // подключение библиотеки для работы с дисплеем

/*
   Создание объекта для работы с дисплеем с параметрами:
   - вывод 12 - вывод DIN
   - вывод 11 - вывод CLK
   - вывод 10 - вывод LD
*/
LedControl matrix = LedControl(12, 11, 10);

unsigned long delaytime = 500; // время ожидания между выводом символов на дисплей

const uint64_t SMARTELEMENTS[] = {
  0x3c66607c66666600, //У
  0xd6d6feeec6000000, //м
  0x667e666666000000, //н
  0xcfdbdbcfc3c30000, //ы
  0x3c067e663c000000, //е
  0x3c66607c60663c00, //Э
  0x6666667c78000000, //л
  0x3c067e663c000000, //е
  0xd6d6feeec6000000, //м
  0x3c067e663c000000, //е
  0x667e666666000000, //н
  0x181818187e000000, //т
  0xcfdbdbcfc3c30000, //ы
  0x0000000000000000  //пустое значение
};


void setup() {
  /*
     При старте микросхема MAX7219 находится в режиме
     пониженного энергопотребления,
     поэтому первым делом нам нужно вывести её
     из этого режима.
  */
  matrix.shutdown(0, false);
  matrix.setIntensity(0, 8); // установим яркость дисплея на 8 - среднее значение (возможно установить от 0 до 15)
  matrix.clearDisplay(0); // очистка дисплея
}

/*
 * Функция отображает шестнадцатиричное приедставление
 * на светодиодной матрице
*/
void displayImage(uint64_t image) {

  for (int i = 0; i < 8; i++) {
    byte row = (image >> i * 8) & 0xFF;
    for (int j = 0; j < 8; j++) {
      matrix.setLed(0, i, j, bitRead(row, j));
    }
  }

}

/*
 * Функция отображает символы из массива 
 */
void display_SmartElements() {
  int smel_len = sizeof(SMARTELEMENTS) / 8;

  for (int i = 0; i < smel_len; i++) {
    displayImage(SMARTELEMENTS[i]);
    delay(delaytime);
  }

}

void loop() {
  display_SmartElements();
}
</file>