Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Примеры/ks0108example

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

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Пример работы нескольких графических функций (версия для 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. }

См.также

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

  1. glcd-v3-20111205.zip