Arduino:Примеры/ks0108example

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

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

См.также

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