Arduino:Примеры/Demo for a Led matrix

Материал из Онлайн справочника
Перейти к навигации Перейти к поиску

Перевод: Максим Кузьмин (Cubewriter) Перевел 364226 статей для сайта.</br>Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Управление матрицей светодиодов[1]

Небольшое скетч, демонстрирующий, как при помощи библиотеки LedControl и платы Arduino управлять матрицей светодиодов. Рекомендуется использовать матрицу размерами как минимум 5 на 7 светодиодов, но подойдет и матрица меньшего размера, но показываемые символы получатся обрезанными.

Обратите особое внимание на код инициализации в блоке setup(). Если вы не выведете MAX72xx из энергосберегающего режима при помощи функции shutdown() или если забудете вызвать функцию setIntensivity(), чтобы настроить яркость, светодиоды останутся темными, даже если скетч запустится без ошибок.

Во всем остальном код довольно прост. Функции rows(), columns() и single() демонстрируют разные способы обновления матрицы. Более красивая функция writeArduinoMatrix() здесь для того, чтобы показать, как управлять небольшим текстовым дисплеем, если у вас есть несколько лишних MAX72xx.

Внимание! Номера контактов к коде нужно поменять на те, что соответствуют вашему проекту.

Код

  1  
  2 // подключаем библиотеку (это нужно делать всегда):
  3 #include "LedControl.h"
  4 
  5 /*
  6  Теперь настраиваем объект LedControl.
  7  
  8  Эти номера контактов, возможно, не будут работать в вашем проекте.
  9  Если необходимо, поменяйте их.
 10 
 11  12-ый контакт подключен к DataIn.
 12  11-ый контакт подключен к CLK.
 13  10-ый контакт подключен к LOAD.
 14  У нас есть только один MAX72XX.
 15  */
 16 LedControl lc=LedControl(12,11,10,1);
 17 
 18 /* Делаем небольшую задержку между обновлениями дисплея. */
 19 unsigned long delaytime=100;
 20 
 21 void setup() {
 22   /*
 23    По умолчанию при запуске у MAX72XX включается энергосберегающий 
 24    режим, поэтому мы должны его «разбудить».
 25    */
 26   lc.shutdown(0,false);
 27   /* Задаем среднюю яркость. */
 28   lc.setIntensity(0,8);
 29   /* Очищаем дисплей. */
 30   lc.clearDisplay(0);
 31 }
 32 
 33 /*
 34  Эта функция будет показывать на матрице символы  для 
 35  Слова «Arduino» – один за другим (чтобы видеть  полные 
 36  символы, размер матрицы должен быть как минимум 5 на 7).
 37 */
 38 void writeArduinoOnMatrix() {
 39   /* Данные для символов. */
 40   byte a[5]={B01111110,B10001000,B10001000,B10001000,B01111110};
 41   byte r[5]={B00111110,B00010000,B00100000,B00100000,B00010000};
 42   byte d[5]={B00011100,B00100010,B00100010,B00010010,B11111110};
 43   byte u[5]={B00111100,B00000010,B00000010,B00000100,B00111110};
 44   byte i[5]={B00000000,B00100010,B10111110,B00000010,B00000000};
 45   byte n[5]={B00111110,B00010000,B00100000,B00100000,B00011110};
 46   byte o[5]={B00011100,B00100010,B00100010,B00100010,B00011100};
 47 
 48   /* Теперь показываем их один за одним с определенной задержкой. */
 49   lc.setRow(0,0,a[0]);
 50   lc.setRow(0,1,a[1]);
 51   lc.setRow(0,2,a[2]);
 52   lc.setRow(0,3,a[3]);
 53   lc.setRow(0,4,a[4]);
 54   delay(delaytime);
 55   lc.setRow(0,0,r[0]);
 56   lc.setRow(0,1,r[1]);
 57   lc.setRow(0,2,r[2]);
 58   lc.setRow(0,3,r[3]);
 59   lc.setRow(0,4,r[4]);
 60   delay(delaytime);
 61   lc.setRow(0,0,d[0]);
 62   lc.setRow(0,1,d[1]);
 63   lc.setRow(0,2,d[2]);
 64   lc.setRow(0,3,d[3]);
 65   lc.setRow(0,4,d[4]);
 66   delay(delaytime);
 67   lc.setRow(0,0,u[0]);
 68   lc.setRow(0,1,u[1]);
 69   lc.setRow(0,2,u[2]);
 70   lc.setRow(0,3,u[3]);
 71   lc.setRow(0,4,u[4]);
 72   delay(delaytime);
 73   lc.setRow(0,0,i[0]);
 74   lc.setRow(0,1,i[1]);
 75   lc.setRow(0,2,i[2]);
 76   lc.setRow(0,3,i[3]);
 77   lc.setRow(0,4,i[4]);
 78   delay(delaytime);
 79   lc.setRow(0,0,n[0]);
 80   lc.setRow(0,1,n[1]);
 81   lc.setRow(0,2,n[2]);
 82   lc.setRow(0,3,n[3]);
 83   lc.setRow(0,4,n[4]);
 84   delay(delaytime);
 85   lc.setRow(0,0,o[0]);
 86   lc.setRow(0,1,o[1]);
 87   lc.setRow(0,2,o[2]);
 88   lc.setRow(0,3,o[3]);
 89   lc.setRow(0,4,o[4]);
 90   delay(delaytime);
 91   lc.setRow(0,0,0);
 92   lc.setRow(0,1,0);
 93   lc.setRow(0,2,0);
 94   lc.setRow(0,3,0);
 95   lc.setRow(0,4,0);
 96   delay(delaytime);
 97 }
 98 
 99 /*
100  Эта функция включает несколько светодиодов, находящихся в одном ряду. 
101  Заданный паттерн будет повторяться в каждом ряду.
102  Кроме того, паттерн будет моргать в соответствии с номером ряда.
103  То есть ряд номер 4 (индекс 3) будет моргать 4 раза и т.д.
104 */
105 void rows() {
106   for(int row=0;row<8;row++) {
107     delay(delaytime);
108     lc.setRow(0,row,B10100000);
109     delay(delaytime);
110     lc.setRow(0,row,(byte)0);
111     for(int i=0;i<row;i++) {
112       delay(delaytime);
113       lc.setRow(0,row,B10100000);
114       delay(delaytime);
115       lc.setRow(0,row,(byte)0);
116     }
117   }
118 }
119 
120 /*
121  Включает несколько светодиодов, находящихся в одном столбце. 
122  Заданный паттерн будет повторяться в каждом столбце.
123  Кроме того, паттерн будет моргать в соответствии с номером столбца.
124  То есть столбец номер 4 (индекс 3) будет моргать 4 раза и т.д.
125  */
126 void columns() {
127   for(int col=0;col<8;col++) {
128     delay(delaytime);
129     lc.setColumn(0,col,B10100000);
130     delay(delaytime);
131     lc.setColumn(0,col,(byte)0);
132     for(int i=0;i<col;i++) {
133       delay(delaytime);
134       lc.setColumn(0,col,B10100000);
135       delay(delaytime);
136       lc.setColumn(0,col,(byte)0);
137     }
138   }
139 }
140 
141 /*
142  Эта функция поочередно включает все светодиоды в матрице.
143  Кроме того, светодиод будет моргать в соответствии с номером ряда.
144  То есть ряд номер 4 (индекс 3) будет моргать 4 раза и т.д. 
145  */
146 void single() {
147   for(int row=0;row<8;row++) {
148     for(int col=0;col<8;col++) {
149       delay(delaytime);
150       lc.setLed(0,row,col,true);
151       delay(delaytime);
152       for(int i=0;i<col;i++) {
153         lc.setLed(0,row,col,false);
154         delay(delaytime);
155         lc.setLed(0,row,col,true);
156         delay(delaytime);
157       }
158     }
159   }
160 }
161 
162 void loop() {
163   writeArduinoOnMatrix();
164   rows();
165   columns();
166   single();
167 }

См.также

Внешние ссылки