Arduino:Примеры/ks0108example
Перейти к навигации
Перейти к поиску
Поддержать проект | Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.
Содержание
Пример работы нескольких графических функций (версия для ks0108)[1]
Этот пример показывает, как использовать на Arduino несколько графических функций библиотеки GLCD. Это скетч-пример из оригинальной библиотеки ks0108.
Код
1
2 /*
3 * Пример ks0108 GLCD
4 * (скетч-пример из оригинальной библиотеки ks0108)
5 *
6 * Базовый тестовый код для библиотеки Arduino KS0108 GLCD.
7 * Этот код тестирует ряд графических функций, поддерживаемых
8 * библиотекой, и попутно является примером их использования.
9 * Кроме того, он показывает информацию о производительности,
10 * а конкретно – количество кадров в секунду.
11 */
12
13 #include <glcd.h>
14 #include "fonts/Arial14.h" // пропорциональный шрифт
15 #include "fonts/SystemFont5x7.h" // системный шрифт
16 #include "bitmaps/ArduinoIcon.h" // картинка
17 //#include "include/glcd_Deprecated.h"
18
19 /*
20 * Проверяем, не маленький ли это дисплей, потому что этот скетч был
21 * написан перед тем, как библиотека начала поддерживать
22 * маленькие дисплеи.
23 */
24 #if DISPLAY_HEIGHT < 64
25 #error примеру ks0108 требуется дисплей, высота которого составляет как минимум 64 пикселя
26 #endif
27 #if DISPLAY_WIDTH < 128
28 #error примеру ks0108 требуется дисплей, ширина которого составляет как минимум 128 пикселей
29 #endif
30
31 unsigned long startMillis;
32 unsigned int loops = 0;
33 unsigned int iter = 0;
34
35 void setup(){
36 GLCD.Init(NON_INVERTED); // инициализируем библиотеку в режиме рисования
37 GLCD.ClearScreen();
38 GLCD.DrawBitmap(ArduinoIcon, 32,0, BLACK); // рисуем картинку в указанных координатах X и Y
39 GLCD.SelectFont(System5x7); // переключаемся на системный шрифт с фиксированной шириной
40 countdown(5);
41 GLCD.ClearScreen();
42 introScreen(); // показываем интро
43 GLCD.ClearScreen();
44 }
45
46 void introScreen(){
47 GLCD.SelectFont(Arial_14); // вы также можете создавать собственные шрифты
48 GLCD.GotoXY(20, 2);
49 GLCD.Puts("GLCD version "); // "Версия GLCD "
50 GLCD.PrintNumber(GLCD_VERSION);
51 GLCD.DrawRoundRect(16,0,99,18, 5, BLACK); // закругленный прямоугольник вокруг текстовой области
52 GLCD.SelectFont(System5x7); // переключаемся на системный шрифт с фиксированной шириной
53 showCharacters();
54 countdown(5);
55 }
56
57 void showCharacters(){
58 byte line = 3; // начинаем с 4-ой линии
59 for(byte c = 32; c <=127; c++){
60 if( (c-32) % 20 == 0)
61 GLCD.CursorTo(1,line++); // функция CursorTo() используется для системного шрифта с фиксированной шириной
62 GLCD.PutChar(c);
63 }
64 }
65
66 void drawSpinner(byte pos, byte x, byte y) {
67 // здесь рисуется объект, который появится в счетчике:
68 switch(pos % 8) {
69 case 0 : GLCD.DrawLine( x, y-8, x, y+8, BLACK); break;
70 case 1 : GLCD.DrawLine( x+3, y-7, x-3, y+7, BLACK); break;
71 case 2 : GLCD.DrawLine( x+6, y-6, x-6, y+6, BLACK); break;
72 case 3 : GLCD.DrawLine( x+7, y-3, x-7, y+3, BLACK); break;
73 case 4 : GLCD.DrawLine( x+8, y, x-8, y, BLACK); break;
74 case 5 : GLCD.DrawLine( x+7, y+3, x-7, y-3, BLACK); break;
75 case 6 : GLCD.DrawLine( x+6, y+6, x-6, y-6, BLACK); break;
76 case 7 : GLCD.DrawLine( x+3, y+7, x-3, y-7, BLACK); break;
77 }
78 }
79
80 void countdown(int count){
81 while(count--){ // делаем обратный отсчет
82 GLCD.CursorTo(0,1); // первый столбец, второй ряд (отсчет от «0»)
83 GLCD.PutChar(count + '0');
84 delay(1000);
85 }
86 }
87
88 void loop(){ // этот блок будет повторяться снова и снова
89 iter = 0;
90 startMillis = millis();
91 while( millis() - startMillis < 1000){ // выделяем для этого цикла одну секунду
92 GLCD.DrawRect(0, 0, 64, 61, BLACK); // прямоугольник в левой части экрана
93 GLCD.DrawRoundRect(68, 0, 58, 61, 5, BLACK); // закругленный прямоугольник вокруг текстовой области
94 for(int i=0; i < 62; i += 4)
95 GLCD.DrawLine(1,1,63,i, BLACK); // рисуем линии, идущие из левого верхнего угла к правому нижнему углу прямоугольника
96 GLCD.DrawCircle(32,31,30,BLACK); // рисуем круг с центром в левой стороне экрана
97 GLCD.FillRect(92,40,16,16, WHITE); // очищаем предыдущую позицию счетчика
98 drawSpinner(loops++,100,48); // рисуем новую позицию счетчика
99 //GLCD.FillRect(24,txtLINE3,14,14, WHITE); // очищаем текстовую область, которая будет нарисована ниже
100 GLCD.CursorTo(5,5); // перемещаем курсор для печати текста
101 GLCD.PrintNumber(++iter); // печатаем текущий цикл на текущей позиции курсора position
102 }
103 // показываем количество проходов в секунду:
104 GLCD.ClearScreen(); // очищаем кран
105 GLCD.CursorTo(14,2); // позиция курсора
106 GLCD.Puts("FPS= "); // печатаем текстовую строку
107 GLCD.PrintNumber(iter); // печатаем число
108 }
См.также
Внешние ссылки