Arduino:Примеры/Demo for a Led matrix
Поддержать проект | Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Управление матрицей светодиодов[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 }
См.также
Внешние ссылки