Arduino:Примеры/ks0108example: различия между версиями
Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Myagkij (обсуждение | вклад) м (Замена текста — «<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">») |
Нет описания правки |
||
Строка 9: | Строка 9: | ||
==Код== | ==Код== | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
/* | /* | ||
* Пример ks0108 GLCD | * Пример ks0108 GLCD |
Версия от 12:35, 20 мая 2023
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.
Пример работы нескольких графических функций (версия для 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); // печатаем число
}