Arduino:Примеры/pcdtest

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

Перевод: Максим Кузьмин (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 }

См.также

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