Arduino:Примеры/ks0108example: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
м (Замена текста — «<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">» на «<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">»)
 
Нет описания правки
 
(не показана 1 промежуточная версия этого же участника)
Строка 9: Строка 9:
==Код==
==Код==


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">  
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">  
/*
/*
  * Пример ks0108 GLCD
  * Пример ks0108 GLCD
Строка 124: Строка 124:


<references />
<references />
{{Навигационная таблица/Портал/Arduino}}
[[Категория:Пример]]
[[Категория:Пример]]
[[Категория:Примеры]]
[[Категория:Примеры]]
[[Категория:Пример программирования Arduino]]
[[Категория:Пример программирования Arduino]]
[[Категория:Примеры программирования Arduino]]
[[Категория:Примеры программирования Arduino]]

Текущая версия от 12:39, 8 июля 2023

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


Пример работы нескольких графических функций (версия для ks0108)[1]

Этот пример показывает, как использовать на Arduino несколько графических функций библиотеки GLCD. Это скетч-пример из оригинальной библиотеки ks0108.

Код

 
/*
 * Пример ks0108 GLCD
 * (скетч-пример из оригинальной библиотеки ks0108)
 *
 * Базовый тестовый код для библиотеки Arduino KS0108 GLCD.
 * Этот код тестирует ряд графических функций, поддерживаемых 
 * библиотекой, и попутно является примером их использования.
 * Кроме того, он показывает информацию о производительности,
 * а конкретно – количество кадров в секунду.
 */

#include <glcd.h>
#include "fonts/Arial14.h"         // пропорциональный шрифт
#include "fonts/SystemFont5x7.h"   // системный шрифт
#include "bitmaps/ArduinoIcon.h"   // картинка
//#include "include/glcd_Deprecated.h"

/*
 * Проверяем, не маленький ли это дисплей, потому что этот скетч был 
 * написан перед тем, как библиотека начала поддерживать 
 * маленькие дисплеи. 
 */
#if DISPLAY_HEIGHT < 64
#error примеру ks0108 требуется дисплей, высота которого составляет как минимум 64 пикселя
#endif
#if DISPLAY_WIDTH < 128
#error примеру ks0108 требуется дисплей, ширина которого составляет как минимум 128 пикселей
#endif

unsigned long startMillis;
unsigned int loops = 0;
unsigned int iter = 0;

void setup(){
  GLCD.Init(NON_INVERTED);   // инициализируем библиотеку в режиме рисования
  GLCD.ClearScreen();  
  GLCD.DrawBitmap(ArduinoIcon, 32,0, BLACK); // рисуем картинку в указанных координатах X и Y
  GLCD.SelectFont(System5x7); // переключаемся на системный шрифт с фиксированной шириной 
  countdown(5); 
  GLCD.ClearScreen();
  introScreen();              // показываем интро 
  GLCD.ClearScreen();
}

void introScreen(){
  GLCD.SelectFont(Arial_14); // вы также можете создавать собственные шрифты 
  GLCD.GotoXY(20, 2);
  GLCD.Puts("GLCD  version  ");  //  "Версия GLCD "
  GLCD.PrintNumber(GLCD_VERSION);
  GLCD.DrawRoundRect(16,0,99,18, 5, BLACK);  // закругленный прямоугольник вокруг текстовой области 
  GLCD.SelectFont(System5x7); // переключаемся на системный шрифт с фиксированной шириной 
  showCharacters();
  countdown(5);
}

void showCharacters(){
  byte line = 3; // начинаем с 4-ой линии 
  for(byte c = 32; c <=127; c++){
     if( (c-32) % 20 == 0)
         GLCD.CursorTo(1,line++);  // функция CursorTo() используется для системного шрифта с фиксированной шириной
     GLCD.PutChar(c);    
  }   
}

void drawSpinner(byte pos, byte x, byte y) {   
  // здесь рисуется объект, который появится в счетчике:
  switch(pos % 8) {
  case 0 : GLCD.DrawLine( x, y-8, x, y+8, BLACK); break;
  case 1 : GLCD.DrawLine( x+3, y-7, x-3, y+7, BLACK);  break;
  case 2 : GLCD.DrawLine( x+6, y-6, x-6, y+6, BLACK);  break;
  case 3 : GLCD.DrawLine( x+7, y-3, x-7, y+3, BLACK);  break;
  case 4 : GLCD.DrawLine( x+8, y, x-8, y, BLACK);  break;
  case 5 : GLCD.DrawLine( x+7, y+3, x-7, y-3, BLACK);  break;
  case 6 : GLCD.DrawLine( x+6, y+6, x-6, y-6, BLACK);  break; 
  case 7 : GLCD.DrawLine( x+3, y+7, x-3, y-7, BLACK);  break;
  } 
}

void countdown(int count){
    while(count--){  // делаем обратный отсчет  
     GLCD.CursorTo(0,1);   // первый столбец, второй ряд (отсчет от «0»)
     GLCD.PutChar(count + '0');
     delay(1000);  
  }  
}

void  loop(){   // этот блок будет повторяться снова и снова
  iter = 0;
  startMillis = millis();
  while( millis() - startMillis < 1000){ // выделяем для этого цикла одну секунду
    GLCD.DrawRect(0, 0, 64, 61, BLACK); // прямоугольник в левой части экрана
    GLCD.DrawRoundRect(68, 0, 58, 61, 5, BLACK);  // закругленный прямоугольник вокруг текстовой области 
    for(int i=0; i < 62; i += 4)
      GLCD.DrawLine(1,1,63,i, BLACK);  // рисуем линии, идущие из левого верхнего угла к правому нижнему углу прямоугольника 
    GLCD.DrawCircle(32,31,30,BLACK);   // рисуем круг с центром в левой стороне экрана 
    GLCD.FillRect(92,40,16,16, WHITE); // очищаем предыдущую позицию счетчика 
    drawSpinner(loops++,100,48);       // рисуем новую позицию счетчика 
    //GLCD.FillRect(24,txtLINE3,14,14, WHITE);  // очищаем текстовую область, которая будет нарисована ниже 
    GLCD.CursorTo(5,5);               // перемещаем курсор для печати текста
    GLCD.PrintNumber(++iter);         // печатаем текущий цикл на текущей позиции курсора position 
  } 
  // показываем количество проходов в секунду:
  GLCD.ClearScreen();               // очищаем кран  
  GLCD.CursorTo(14,2);              // позиция курсора  
  GLCD.Puts("FPS= ");               // печатаем текстовую строку
  GLCD.PrintNumber(iter);           // печатаем число 
}

См.также

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