|
draw_cooler_icon
#include //библиотека для работы с дисплеем
// создаём объект класса UTFT
// и передаём идентификатор модели дисплея и номера пинов
// к которым подключаются линии SCK, SDI (MOSI), D/C, RESET, CS
// UTFT myGLCD(TFT01_22SP, SDI (MOSI),SCK, CS, RESET, D/C);
UTFT myGLCD(TFT01_22SP, 8, 9, 10, 11, 12 );
byte tact = 0;
int act = 0;
boolean cooler; // переменная режима "вентилятор"
boolean heater_1; // переменная режима "отопитель 1"
boolean heater_2; // переменная режима "отопитель 2"
boolean cooler_button; // кнопка вентилятора
boolean heater_1_button; // кнопка 1-ого отопителя
boolean heater_2_button ; // кнопка 2-ого отопителя
//-- переменные временного хранения--
boolean cooler_z;
boolean heater_1_z;
boolean heater_2_z;
//----------------------------------
int draw_cooler_icon
(int x, int y, boolean cool, boolean heat, boolean Button, byte id);
int draw_cooler_off_icon (int x, int y);
void setup() {
myGLCD.InitLCD(1); // инициализируем дисплей с горизонтальной ориентацией
// обязательно указать данную строчку в setup
}
void loop() {
if (tact==0) {myGLCD.clrScr();}; // очищаем экран в нулевом,
// условно загрузочном, такте
if (tact == 4) {tact=1;}; // Cброс счетчика тактов
if (act == 1024) {act=1;}; // Cброс счетчика тактов
// ....Тело основной программы.....
draw_cooler_icon ( 270,9, cooler, false, cooler_button,1);
draw_cooler_icon ( 270,57, false, heater_1, heater_1_button,2);
draw_cooler_icon ( 270,105, false, heater_2, heater_2_button,3);
delay (100); // Небольшая задержка для анимации
//---Запись в переменные временного хранения состояния режима--
cooler_z = cooler;
heater_1_z = heater_1;
heater_2_z = heater_2;
//-------------------------------------------------------------
act++;
tact++;
}
int draw_cooler_icon
(int x, int y, boolean cool, boolean heat, boolean Button, byte id)
// Функция, по линиям рисует вентилятор.
// a,b,c - RGB цвет;
// x,y - координаты левого верхнего угла (-4px)
// id - уникальный номер для возможности отрисовки
// нескольких вентиляторов на одном экране.
// Button Переменная ручного включения
{
int a=0; int b=0; int c=0;
// Анимация происходит по 1 кадру за каждый цикл программы
if (cool || heat)
{
if (cool) {c=255;}; // Выбор цвета для вентилятора.
if (heat) {a=255;}; // Выбор цвета для отопителя.
if (tact == 1 )
{
myGLCD.setColor(a,b,c);
myGLCD.drawRoundRect(x-4,y-4,x+34,y+34);
myGLCD.drawCircle(x+15,y+15,16);
myGLCD.setColor(0,0,0);
myGLCD.fillCircle(x+15,y+15,15);
myGLCD.setColor(a,b,c);
myGLCD.drawCircle(x+15,y+15,4);
myGLCD.fillRect (x+1,y+17,x+8,y+13);
myGLCD.fillRect (x+13,y+8,x+17,y+1);
myGLCD.fillRect (x+22,y+17,x+29,y+13);
myGLCD.fillRect (x+13,y+29,x+17,y+22);
myGLCD.drawHLine (x+1,y+12,5);
myGLCD.drawHLine (x+2,y+11,2);
myGLCD.drawHLine (x+1,y+18,5);
myGLCD.drawHLine (x+2,y+19,2);
myGLCD.drawVLine (x+9,y+14,2);
myGLCD.drawVLine (x+12,y+6,-5);
myGLCD.drawVLine (x+18,y+6,-5);
myGLCD.drawVLine (x+11,y+4,-2);
myGLCD.drawVLine (x+19,y+4,-2);
myGLCD.drawHLine (x+14,y+9, 2);
myGLCD.drawHLine (x+24,y+12,5);
myGLCD.drawHLine (x+26,y+11,2);
myGLCD.drawHLine (x+24,y+18,5);
myGLCD.drawHLine (x+26,y+19,2);
myGLCD.drawVLine (x+21,y+14,2);
myGLCD.drawVLine (x+12,y+29,-5);
myGLCD.drawVLine (x+18,y+29,-5);
myGLCD.drawVLine (x+11,y+28,-2);
myGLCD.drawVLine (x+19,y+28,-2);
myGLCD.drawHLine (x+14,y+21, 2);
///----------Бегающая рамка при включенном вручную вентиляторе----------
if (Button) {
myGLCD.setColor(0,0,0);
myGLCD.drawRoundRect(x-8,y-8,x+38,38+y);
myGLCD.setColor(a,b,c);
myGLCD.drawRoundRect(x-6,y-6,x+36,36+y);}
};
if (tact == 2)
{
myGLCD.setColor(a,b,c);
myGLCD.drawRoundRect(x-4,y-4,x+34,y+34);
myGLCD.drawCircle(x+15,y+15,16);
myGLCD.setColor(0,0,0);
myGLCD.fillCircle(x+15,y+15,15);
myGLCD.setColor(a,b,c);
myGLCD.fillRect (x+4,y+11,x+8,y+6);
myGLCD.fillRect (x+20,y+5,x+25,y+9);
myGLCD.fillRect (x+22,y+24,x+26,y+19);
myGLCD.fillRect (x+6,y+22,x+11,y+26);
myGLCD.drawCircle(x+15,y+15,4);
myGLCD.drawHLine (x+6,y+12,4);
myGLCD.drawHLine (x+5,y+5,2);
myGLCD.drawVLine (x+3,y+11,-4);
myGLCD.drawVLine (x+2,y+10,-1);
myGLCD.drawVLine (x+9,y+13,-4);
myGLCD.drawPixel (x+8, y+13);
myGLCD.drawPixel (x+10, y+11);
myGLCD.drawVLine (x+19,y+11,-4);
myGLCD.drawVLine (x+26,y+8,-2);
myGLCD.drawHLine (x+18,y+10,4);
myGLCD.drawHLine (x+20,y+4,4);
myGLCD.drawHLine (x+21,y+3,1);
myGLCD.drawPixel (x+18, y+9);
myGLCD.drawPixel (x+20, y+11);
myGLCD.drawHLine (x+20,y+18,4);
myGLCD.drawHLine (x+23,y+25,2);
myGLCD.drawVLine (x+21,y+21,-4);
myGLCD.drawVLine (x+27,y+23,-4);
myGLCD.drawVLine (x+28,y+21,-1);
myGLCD.drawPixel (x+20, y+19);
myGLCD.drawPixel (x+22, y+17);
myGLCD.drawHLine (x+9,y+28,1);
myGLCD.drawHLine (x+9,y+21,4);
myGLCD.drawHLine (x+7,y+27,4);
myGLCD.drawVLine (x+12,y+24,-4);
myGLCD.drawVLine (x+5,y+25,-2);
myGLCD.drawPixel (x+11, y+20);
myGLCD.drawPixel (x+13, y+22);
///----------Бегающая рамка при включенном вручную вентиляторе-----------
if (Button) {
myGLCD.setColor(0,0,0);
myGLCD.drawRoundRect(x-6,y-6,x+36,y+36);
myGLCD.setColor(a,b,c);
myGLCD.drawRoundRect(x-7,y-7,x+37,y+37);}
};
if (tact == 3)
{
myGLCD.setColor(a,b,c);
myGLCD.drawRoundRect(x-4,y-4,x+34,y+34);
myGLCD.drawCircle(x+15,y+15,16);
myGLCD.setColor(0,0,0);
myGLCD.fillCircle(x+15,y+15,15);
myGLCD.setColor(a,b,c);
myGLCD.fillRect (x+7,y+8,x+12,y+4);
myGLCD.fillRect (x+23,y+8,x+27,y+13);
myGLCD.fillRect (x+19,y+26,x+24,y+22);
myGLCD.fillRect (x+4,y+19,x+8,y+24);
myGLCD.drawCircle(x+15,y+15,4);
myGLCD.drawVLine (x+6,y+7,-2);
myGLCD.drawVLine (x+13,y+10,-4);
myGLCD.drawHLine (x+9,y+2,2);
myGLCD.drawHLine (x+8,y+3,4);
myGLCD.drawHLine (x+10,y+9,4);
myGLCD.drawPixel (x+12, y+10);
myGLCD.drawPixel (x+14, y+8);
myGLCD.drawVLine (x+22,y+15,-4);
myGLCD.drawVLine (x+28,y+13,-4);
myGLCD.drawHLine (x+21,y+14,4);
myGLCD.drawHLine (x+24,y+7,2);
myGLCD.drawPixel (x+21, y+13);
myGLCD.drawPixel (x+23, y+15);
myGLCD.drawVLine (x+18,y+24,-4);
myGLCD.drawVLine (x+25,y+25,-2);
myGLCD.drawHLine (x+17,y+21,4);
myGLCD.drawHLine (x+19,y+27,4);
myGLCD.drawHLine (x+20,y+28,2);
myGLCD.drawPixel (x+17, y+22);
myGLCD.drawPixel (x+19, y+20);
myGLCD.drawVLine (x+2,y+21,-1);
myGLCD.drawVLine (x+3,y+23,-4);
myGLCD.drawVLine (x+9,y+21,-4);
myGLCD.drawHLine (x+6,y+18,4);
myGLCD.drawHLine (x+5,y+25,2);
myGLCD.drawPixel (x+8, y+17);
myGLCD.drawPixel (x+10, y+19);
///----------Бегающая рамка при включенном вручную вентиляторе-----------
if (Button) {
myGLCD.setColor(0,0,0);
myGLCD.drawRoundRect(x-7,y-7,x+37,y+37);
myGLCD.setColor(a,b,c);
myGLCD.drawRoundRect(x-8,y-8,x+38,y+38);}
};
}
if (tact==1 && Button== false) {myGLCD.setColor(0,0,0);
myGLCD.drawRoundRect(x-6,y-6,x+36,36+y);};
if (tact==2 && Button== false) {myGLCD.setColor(0,0,0);
myGLCD.drawRoundRect(x-7,y-7,x+37,37+y);};
if (tact == 3 && Button== false) {myGLCD.setColor(0,0,0);
myGLCD.drawRoundRect(x-8,y-8,x+38,38+y);};
//------- Отрисовка не активной иконки. Функция запускается один раз,
// при изменении состояния объекта.
if ((cooler_z != cooler) && (cooler == false && id==1) || act==0 )
{draw_cooler_off_icon (x,y);};
//-----------------( Лишнее отрезать )------------------------------
if ((heater_1_z != heater_1) && (heater_1 == false && id==2) || act==0 )
{draw_cooler_off_icon (x,y);};
//-----------------( Лишнее отрезать )-------------------------------
if ((heater_2_z != heater_2) && (heater_2 == false && id==3) || act==0 )
{draw_cooler_off_icon (x,y);};
}
int draw_cooler_off_icon (int x, int y)
// Дополнение к функции draw_cooler_icon
// Отрисовка не активного вентилятора.
{
myGLCD.setColor(0,0,0);
myGLCD.drawRoundRect(x-4,y-4,x+34,y+34);
myGLCD.fillCircle(x+15,y+15,16);
myGLCD.setColor(50,50,50);
myGLCD.drawRoundRect(x-4,y-4,x+34,y+34);
myGLCD.drawCircle(x+15,y+15,16);
myGLCD.drawCircle(x+15,y+15,4);
myGLCD.fillRect (x+1,y+17,x+8,y+13);
myGLCD.fillRect (x+13,y+8,x+17,y+1);
myGLCD.fillRect (x+22,y+17,x+29,y+13);
myGLCD.fillRect (x+13,y+29,x+17,y+22);
myGLCD.drawHLine (x+1,y+12,5);
myGLCD.drawHLine (x+2,y+11,2);
myGLCD.drawHLine (x+1,y+18,5);
myGLCD.drawHLine (x+2,y+19,2);
myGLCD.drawVLine (x+9,y+14,2);
myGLCD.drawVLine (x+12,y+6,-5);
myGLCD.drawVLine (x+18,y+6,-5);
myGLCD.drawVLine (x+11,y+4,-2);
myGLCD.drawVLine (x+19,y+4,-2);
myGLCD.drawHLine (x+14,y+9, 2);
myGLCD.drawHLine (x+24,y+12,5);
myGLCD.drawHLine (x+26,y+11,2);
myGLCD.drawHLine (x+24,y+18,5);
myGLCD.drawHLine (x+26,y+19,2);
myGLCD.drawVLine (x+21,y+14,2);
myGLCD.drawVLine (x+12,y+29,-5);
myGLCD.drawVLine (x+18,y+29,-5);
myGLCD.drawVLine (x+11,y+28,-2);
myGLCD.drawVLine (x+19,y+28,-2);
myGLCD.drawHLine (x+14,y+21, 2);
}
|
|