Arduino:Примеры/pcdtest
Перейти к навигации
Перейти к поиску
Поддержать проект | Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.
Тестовый скетч для библиотеки PCD8544[1]
Это текстовый скетч для библиотеки PCD8544, который при помощи платы Arduino совершает с LCD-дисплеем PCD8544 различные действия: печатает текст, картинки, заставку и пр.
Код
1
2 /*********************************************************************
3 Это скетч-пример для монохромного LCD-дисплея Nokia 5110.
4
5 Купить его можно в магазине adafruit!
6 ------> http://www.adafruit.com/products/338
7
8 Эти дисплеи используют SPI-коммуникацию: для интерфейса
9 требуется 4-5 контактов.
10
11 Adafruit инвестировала время и ресурсы, создавая эту библиотеку
12 с открытым кодом. Пожалуйста, поддержите Adafruit и оборудование
13 с открытым кодом, покупая продукты Adafruit!
14
15 Написана Лимор Фрид (Limor Fried, Ladyada) для Adafruit Industries.
16 Лицензия BSD license, подробней читайте в файле «license.txt».
17
18 Весь текст выше и экран заставка должны быть включены
19 при любом повторном распространении этой библиотеки.
20 *********************************************************************/
21
22 #include <SPI.h>
23 #include <Adafruit_GFX.h>
24 #include <Adafruit_PCD8544.h>
25
26 // Программный SPI-интерфейс (медленный, но есть гибкость
27 // в выборе контактов):
28 // контакт 7 – тактовая частота (SCLK)
29 // контакт 6 – передача данных (DIN)
30 // контакт 5 – выбор между инструкциями и данными (D/C)
31 // контакт 4 – выбор чипа LCD-дипслея (CS)
32 // контакт 3 – сброс LCD-дисплея (RST)
33 Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);
34
35 // Аппаратный SPI-интерфейс (более быстрый, но нужно использовать
36 // строго определенные контакты):
37 // контакт 13 (на Arduino Uno; SCK) - тактовая частота (SCLK)
38 // контакт 11 (на Arduino Uno; MOSI) – передача данных (DIN)
39 // контакт 5 - выбор между инструкциями и данными (D/C)
40 // контакт 4 – выбор чипа LCD-дисплея (CS)
41 // контакт 3 – сброс LCD-дисплея (RST)
42 // Adafruit_PCD8544 display = Adafruit_PCD8544(5, 4, 3);
43 // Обратите внимание, что при использовании аппаратного SPI-интерфейса
44 // контакты MISO и SS не используются, однако во время передачи данных
45 // на них по-прежнему будет осуществляться запись и считывание.
46 // Повнимательней с этими контактами!
47
48 #define NUMFLAKES 10
49 #define XPOS 0
50 #define YPOS 1
51 #define DELTAY 2
52
53
54 #define LOGO16_GLCD_HEIGHT 16
55 #define LOGO16_GLCD_WIDTH 16
56
57 static const unsigned char PROGMEM logo16_glcd_bmp[] =
58 { B00000000, B11000000,
59 B00000001, B11000000,
60 B00000001, B11000000,
61 B00000011, B11100000,
62 B11110011, B11100000,
63 B11111110, B11111000,
64 B01111110, B11111111,
65 B00110011, B10011111,
66 B00011111, B11111100,
67 B00001101, B01110000,
68 B00011011, B10100000,
69 B00111111, B11100000,
70 B00111111, B11110000,
71 B01111100, B11110000,
72 B01110000, B01110000,
73 B00000000, B00110000 };
74
75 void setup() {
76 Serial.begin(9600);
77
78 display.begin();
79 // инициализация завершена
80
81 // здесь можно поменять контрастность:
82 display.setContrast(50);
83
84 display.display(); // показываем заставку
85 delay(2000);
86 display.clearDisplay(); // очищаем экран и буфер
87
88 // рисуем один пиксель:
89 display.drawPixel(10, 10, BLACK);
90 display.display();
91 delay(2000);
92 display.clearDisplay();
93
94 // рисуем много линий:
95 testdrawline();
96 display.display();
97 delay(2000);
98 display.clearDisplay();
99
100 // рисуем прямоугольники:
101 testdrawrect();
102 display.display();
103 delay(2000);
104 display.clearDisplay();
105
106 // рисуем много прямоугольников:
107 testfillrect();
108 display.display();
109 delay(2000);
110 display.clearDisplay();
111
112 // рисуем много кругов:
113 testdrawcircle();
114 display.display();
115 delay(2000);
116 display.clearDisplay();
117
118 // рисуем круг с радиусом в 10 пикселей:
119 display.fillCircle(display.width()/2, display.height()/2, 10, BLACK);
120 display.display();
121 delay(2000);
122 display.clearDisplay();
123
124 testdrawroundrect();
125 delay(2000);
126 display.clearDisplay();
127
128 testfillroundrect();
129 delay(2000);
130 display.clearDisplay();
131
132 testdrawtriangle();
133 delay(2000);
134 display.clearDisplay();
135
136 testfilltriangle();
137 delay(2000);
138 display.clearDisplay();
139
140 // рисуем первые 12 символов шрифта:
141 testdrawchar();
142 display.display();
143 delay(2000);
144 display.clearDisplay();
145
146 // тесты, проверяющие печать текста:
147 display.setTextSize(1);
148 display.setTextColor(BLACK);
149 display.setCursor(0,0);
150 display.println("Hello, world!"); // "Привет, мир!"
151 display.setTextColor(WHITE, BLACK); // «инвертированный» текст
152 display.println(3.141592);
153 display.setTextSize(2);
154 display.setTextColor(BLACK);
155 display.print("0x"); display.println(0xDEADBEEF, HEX);
156 display.display();
157 delay(2000);
158
159 // демонстрация вращения:
160 display.clearDisplay();
161 display.setRotation(1); // вращаем на 90 градусов по часовой стрелке; чтобы вращать еще дальше, используйте «2» или «3»
162 display.setTextSize(1);
163 display.setTextColor(BLACK);
164 display.setCursor(0,0);
165 display.println("Rotation"); // "Вращение"
166 display.setTextSize(2);
167 display.println("Example!"); // "Пример!"
168 display.display();
169 delay(2000);
170
171 // инвертируем вращение:
172 display.setRotation(0);
173
174 // миниатюрная картинка:
175 display.clearDisplay();
176 display.drawBitmap(30, 16, logo16_glcd_bmp, 16, 16, 1);
177 display.display();
178
179 // инвертируем дисплей:
180 display.invertDisplay(true);
181 delay(1000);
182 display.invertDisplay(false);
183 delay(1000);
184
185 // рисуем иконку и «анимируем» движение:
186 testdrawbitmap(logo16_glcd_bmp, LOGO16_GLCD_WIDTH, LOGO16_GLCD_HEIGHT);
187 }
188
189
190 void loop() {
191
192 }
193
194
195 void testdrawbitmap(const uint8_t *bitmap, uint8_t w, uint8_t h) {
196 uint8_t icons[NUMFLAKES][3];
197 randomSeed(666); // любое значение
198
199 // инициализируем:
200 for (uint8_t f=0; f< NUMFLAKES; f++) {
201 icons[f][XPOS] = random(display.width());
202 icons[f][YPOS] = 0;
203 icons[f][DELTAY] = random(5) + 1;
204
205 Serial.print("x: ");
206 Serial.print(icons[f][XPOS], DEC);
207 Serial.print(" y: ");
208 Serial.print(icons[f][YPOS], DEC);
209 Serial.print(" dy: ");
210 Serial.println(icons[f][DELTAY], DEC);
211 }
212
213 while (1) {
214 // рисуем каждую иконку:
215 for (uint8_t f=0; f< NUMFLAKES; f++) {
216 display.drawBitmap(icons[f][XPOS], icons[f][YPOS], logo16_glcd_bmp, w, h, BLACK);
217 }
218 display.display();
219 delay(200);
220
221 // затем стираем и двигаем:
222 for (uint8_t f=0; f< NUMFLAKES; f++) {
223 display.drawBitmap(icons[f][XPOS], icons[f][YPOS], logo16_glcd_bmp, w, h, WHITE);
224 // двигаем:
225 icons[f][YPOS] += icons[f][DELTAY];
226 // если исчезла, инициализируем заново:
227 if (icons[f][YPOS] > display.height()) {
228 icons[f][XPOS] = random(display.width());
229 icons[f][YPOS] = 0;
230 icons[f][DELTAY] = random(5) + 1;
231 }
232 }
233 }
234 }
235
236
237 void testdrawchar(void) {
238 display.setTextSize(1);
239 display.setTextColor(BLACK);
240 display.setCursor(0,0);
241
242 for (uint8_t i=0; i < 168; i++) {
243 if (i == '\n') continue;
244 display.write(i);
245 //if ((i > 0) && (i % 14 == 0))
246 //display.println();
247 }
248 display.display();
249 }
250
251 void testdrawcircle(void) {
252 for (int16_t i=0; i<display.height(); i+=2) {
253 display.drawCircle(display.width()/2, display.height()/2, i, BLACK);
254 display.display();
255 }
256 }
257
258 void testfillrect(void) {
259 uint8_t color = 1;
260 for (int16_t i=0; i<display.height()/2; i+=3) {
261 // alternate colors
262 display.fillRect(i, i, display.width()-i*2, display.height()-i*2, color%2);
263 display.display();
264 color++;
265 }
266 }
267
268 void testdrawtriangle(void) {
269 for (int16_t i=0; i<min(display.width(),display.height())/2; i+=5) {
270 display.drawTriangle(display.width()/2, display.height()/2-i,
271 display.width()/2-i, display.height()/2+i,
272 display.width()/2+i, display.height()/2+i, BLACK);
273 display.display();
274 }
275 }
276
277 void testfilltriangle(void) {
278 uint8_t color = BLACK;
279 for (int16_t i=min(display.width(),display.height())/2; i>0; i-=5) {
280 display.fillTriangle(display.width()/2, display.height()/2-i,
281 display.width()/2-i, display.height()/2+i,
282 display.width()/2+i, display.height()/2+i, color);
283 if (color == WHITE) color = BLACK;
284 else color = WHITE;
285 display.display();
286 }
287 }
288
289 void testdrawroundrect(void) {
290 for (int16_t i=0; i<display.height()/2-2; i+=2) {
291 display.drawRoundRect(i, i, display.width()-2*i, display.height()-2*i, display.height()/4, BLACK);
292 display.display();
293 }
294 }
295
296 void testfillroundrect(void) {
297 uint8_t color = BLACK;
298 for (int16_t i=0; i<display.height()/2-2; i+=2) {
299 display.fillRoundRect(i, i, display.width()-2*i, display.height()-2*i, display.height()/4, color);
300 if (color == WHITE) color = BLACK;
301 else color = WHITE;
302 display.display();
303 }
304 }
305
306 void testdrawrect(void) {
307 for (int16_t i=0; i<display.height()/2; i+=2) {
308 display.drawRect(i, i, display.width()-2*i, display.height()-2*i, BLACK);
309 display.display();
310 }
311 }
312
313 void testdrawline() {
314 for (int16_t i=0; i<display.width(); i+=4) {
315 display.drawLine(0, 0, i, display.height()-1, BLACK);
316 display.display();
317 }
318 for (int16_t i=0; i<display.height(); i+=4) {
319 display.drawLine(0, 0, display.width()-1, i, BLACK);
320 display.display();
321 }
322 delay(250);
323
324 display.clearDisplay();
325 for (int16_t i=0; i<display.width(); i+=4) {
326 display.drawLine(0, display.height()-1, i, 0, BLACK);
327 display.display();
328 }
329 for (int8_t i=display.height()-1; i>=0; i-=4) {
330 display.drawLine(0, display.height()-1, display.width()-1, i, BLACK);
331 display.display();
332 }
333 delay(250);
334
335 display.clearDisplay();
336 for (int16_t i=display.width()-1; i>=0; i-=4) {
337 display.drawLine(display.width()-1, display.height()-1, i, 0, BLACK);
338 display.display();
339 }
340 for (int16_t i=display.height()-1; i>=0; i-=4) {
341 display.drawLine(display.width()-1, display.height()-1, 0, i, BLACK);
342 display.display();
343 }
344 delay(250);
345
346 display.clearDisplay();
347 for (int16_t i=0; i<display.height(); i+=4) {
348 display.drawLine(display.width()-1, 0, 0, i, BLACK);
349 display.display();
350 }
351 for (int16_t i=0; i<display.width(); i+=4) {
352 display.drawLine(display.width()-1, 0, i, display.height()-1, BLACK);
353 display.display();
354 }
355 delay(250);
356 }
См.также
Внешние ссылки