|
graphic
#define pin_SW_SDA 53 // Назначение любого вывода Arduino для работы в качестве линии SDA программной шины I2C.
#define pin_SW_SCL 51 // для работы в качестве линии SDA программной шины I2C. (для часов RTC_DS3231)
//библиотека для работы с дисплеем
#include < UTFT.h >
// Подключаем библиотеку часов реального времени
#include < iarduino_RTC.h >
// создаём объект класса 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 );
// Объявляем объект watch для модуля на базе чипа DS1307 (часы реального времени)
iarduino_RTC watch(RTC_DS3231);
uint8_t D, M, Y, h, m, s; // W; // Объявляем переменные для получения следующих значений:
// D-день, M-месяц, Y-год, h-часы, m-минуты, s-секунды, W-день недели.
const int DHT22_1 = 2; //Пин подключения датчика DHT
//------Данные с датчиков---------------------------------------
byte day_T [25]; //Массив для хранения часовых значений температуры
byte day_t [25];
byte day_T_30min[25];
byte day_t_30min[25];
int t; //Температура воздуха внутри помещения
byte w; //Влажность внутри помещения
//Температура и влажность для 2ого датчика DHT (не подключен в данном скетче)
int T;
byte W;
byte *pointerToBYTE_1;
int *pointerToINT_2;
int act;
int DHT22_read(int pin); //Портотип функции получения показания данных датчика.
int graphic ( int x, int y, int resolution_grid_x, int resolution_grid_y, int step_X, int step_Y,
int zoom_Y, int l, int type, int data_1[], int data_2[] );
int draw_graphic ();
int small_counter (int x, int y, byte count_number, boolean i, int a,int b,int c);
int hour_minus ();
int Write_8px (char, int, int);
void setup() {
myGLCD.InitLCD(1); // инициализируем дисплей с горизонтальной ориентацией
watch.begin(); // Инициируем RTC модуль
// сек, мин, час, день, месяц, год, день недели
//watch.settime (0, 57, 16, 13, 10, 20, 1);
//Устанавливаем текущее время.
//Прошивается один раз, после чего строку нужно закоментить
}
void loop() {
if (act==100){act=1;}; // Сброс счетчика актов.
//----получение данных о температуре--
pointerToINT_2 = &t;
pointerToBYTE_1 = &w;
DHT22_read(DHT22_1);
//------------------------------------
//Получение реализовано через указатели.
//Для следующего датчика: указатели на адреса новых переменных и вызов функции.
//между опросами датчика DHT22, должно проходить не менее 2х секунд,
//так как иначе иногда не приходят данные о влажности.
//
//------ Часы реального времени---(RTC)----
watch.gettime(); // Считываем текущее время из модуля.
// D = watch.day; // Получаем из буфера библиотеки текущий день месяца 1-31.
// M = watch.month; // Получаем из буфера библиотеки текущий месяц 1-12.
// Y = watch.year; // Получаем из буфера библиотеки текущий год 0-99.
// h = watch.Hours; // Получаем из буфера библиотеки текущие часы 0-23.
// m = watch.minutes; // Получаем из буфера библиотеки текущие минуты 0-59.
// s = watch.seconds; // Получаем из буфера библиотеки текущие секунды 0-59.
// W = watch.weekday;
//--Заполнение массивов для построения графиков
//-- Данные температуры на начало часа
if ( 1 < watch.minutes < 2){
day_T [watch.Hours] = T;
day_t [watch.Hours] = t;
}
//-- Данные температуры на середину часа
if (29 < watch.minutes < 30) {
day_T_30min[watch.Hours]=T;
day_t_30min[watch.Hours]=t;
};
//---------------------------------------
if (act==1)
{
myGLCD.InitLCD(1); // инициализируем дисплей с горизонтальной ориентацией
myGLCD.clrScr(); // очищаем экран
int day_T_for_graphic[25]; // массивы для передачи в функцию рисования графика
int day_t_for_graphic[25]; //
//-----Подготовка массивов с данными для передачи в функцию отрисовки графика
for (int i=0; i<(watch.Hours+1); i++)
{
day_T_for_graphic[23-i] = day_T[(watch.Hours)-i];
day_t_for_graphic[23-i] = day_t[(watch.Hours)-i];
};
for (int i=0; i<(23-watch.Hours); i++)
{
day_T_for_graphic[i] = day_T[(watch.Hours)+i+1];
day_t_for_graphic[i] = day_t[(watch.Hours)+i+1];
};
day_T_for_graphic[23] = day_T[watch.Hours];
day_T_for_graphic[24] = day_T[watch.Hours];
day_t_for_graphic[23] = day_t[watch.Hours];
day_t_for_graphic[24] = day_t[watch.Hours];
//---------------------------------------------------------------------------
graphic ( 20, 15, 240, 200, 10, 10, 2, 25, 1, day_t_for_graphic, day_T_for_graphic );
myGLCD.setColor(240, 230, 140);
Write_8px ("SUTOcNAY0", 30, 7);
Write_8px ("TEMPERATURA0", 110, 7);
small_counter ( 220, 7, watch.day, 0, 255, 255, 255);
small_counter ( 237, 7, watch.month, 0, 255, 255, 255);
myGLCD.setColor(255, 255, 255);
myGLCD.drawPixel (229, 14);
//----- отметки оси Х (рисуются вручную для каждого графика)
small_counter ( 257, 120, (watch.Hours)+1, 0, 211, 211, 211);
small_counter ( 217, 120, hour_minus((watch.Hours)+1), 0, 211, 211, 211);
small_counter ( 177, 120, hour_minus((watch.Hours)-3), 0, 211, 211, 211);
small_counter ( 137, 120, hour_minus((watch.Hours)-7), 0, 211, 211, 211);
small_counter ( 97, 120, hour_minus((watch.Hours)-11), 0, 211, 211, 211);
small_counter ( 57, 120, hour_minus((watch.Hours)-15), 0, 211, 211, 211);
//-----отметки оси Y
small_counter ( 10, 110, 0, 0, 255, 255, 255);
small_counter ( 10, 90, 10, 0, 255, 215, 0);
small_counter ( 10, 70, 20, 0, 255, 140, 0);
small_counter ( 10, 50, 30, 0, 255, 140, 0);
small_counter ( 10, 30, 40, 0, 255, 140, 0);
small_counter (10, 130, 10, 0, 100, 149, 237);
small_counter (10, 150, 20, 0, 0, 0, 255);
small_counter (10, 170, 30, 0, 0, 0, 255);
small_counter (10, 190, 40, 0, 0, 0, 255);
}
delay (10000);
act++;
};
int DHT22_read(int pin)
{
byte data[5]; //Массив для хранения результатов.
int k=0;
int temp=0;
data[0]=data[1]=data[2]=data[3]=data[4]=0; //обнуляем массив
pinMode(pin,OUTPUT);
digitalWrite(pin,LOW);
delay(2);
pinMode(pin,INPUT);
k=pulseIn(pin,LOW, 600);
for(int i=0; i<40; i++)
{
k=pulseIn(pin,HIGH,600);
if(k){
data[i/8] <<= 1;
data[i/8]+= k>50?1:0;
}
else {
//Обработка ошибки 1.
}
}
*pointerToBYTE_1 = ((data[1]+(data[0] <<8)) * (0.1));
if ( (data[2]== 1) || (data[2]== 0)) {
temp=(data[3]+(data[2] <<8)) * (0.1 );};
if(data[2]==128) {temp=data[3];
temp=temp *(-0.1);};
//-----Теоретическая строчка (для температур ниже -25.5 градусов)
if(data[2]==255) {temp=data[3]+(1 <<8 );
temp=temp *(-0.1);};
//--------------------------------------------------------------
*pointerToINT_2 = temp;
}
int graphic ( int x, int y, int resolution_grid_x, int resolution_grid_y, int step_X, int step_Y,
int zoom_Y, int l, int type, int data_1[], int data_2[] )
{
//graphic ( 20, 15, 240, 200, 10, 10, 2, 25, 1, day_T_for_graphic, day_t_for_graphic );
//int l = 25; //длинна графика в вершинах из массива.
//Одна точка, одна ячейка массива.
//int step_X = 10; //шаг вершин графика по оси Х, сетка по оси х в 2 раза больше этого значения.
//int step_Y = 10; //шаг по оси Y
//int zoom_Y = 2; //масштабирование графика по оси Y. (умножение значения Y)
//int x=20; //начальные координаты графика.
//int y=15; //левый верхний угол
//int type=1; //тип графика Тип 1: положительные и отрицательные значения по оси Y. Тип 2: только положительные по Y.
//int resolution_grid_x=240; // (размер (разрешение) графика)
//int resolution_grid_y=200;
resolution_grid_y=resolution_grid_y/2;
myGLCD.setColor(70,70,70);
for (int i=1; iBy && (Ay-By)>5){r1=1;} // возростание 1й линии графика
else if (Ay5){r1=2;} // снижение 1й линии графика
else {r1=0;}; // без сглаживания
if (By>Cy && (By-Cy)>5){r2=1;} // возростание 2й линии графика
else if (By5){r2=2;} // снижение 2й линии графика
else {r2=0;}; // без сглаживания
//--сглаживание вершин происходит если расcтояние между соседними вершинами по оси Y более 5px
if (r1==1) {A2x=Ax+2;
A2y=Ay-1;
B1x=Bx-2;
B1y=By+1;};
if (r1==2) {A2x=Ax+2;
A2y=Ay+1;
B1x=Bx-2;
B1y=By-1;};
if (r1==0) {A2x=Ax;
A2y=Ay;
B1x=Bx;
B1y=By;};
if (r2==1) {B2x=Bx+2;
B2y=By-1;
C1x=Cx-2;
C1y=Cy+1;};
if (r2==2) {B2x=Bx+2;
B2y=By+1;
C1x=Cx-2;
C1y=Cy-1;};
if (r2==0) {B2x=Bx;
B2y=By;
C1x=Cx;
C1y=Cy;};
//---- 1. График со сглаженными вершинами
myGLCD.drawLine (Ax, Ay, A2x, A2y);
myGLCD.drawLine (A2x, A2y, B1x, B1y);
myGLCD.drawLine (B1x, B1y, Bx, By);
myGLCD.drawLine (Bx, By, B2x, B2y);
myGLCD.drawLine (B2x, B2y, C1x, C1y);
myGLCD.drawLine (C1x, C1y, Cx, Cy);
//---- 2. График без сглаживания вершин
//myGLCD.drawLine (Ax,Ay,Bx,By);
//myGLCD.drawLine (Bx,By, Cx,Cy);
};
};
void Write_8px (char latters[40], int x1, int y1)
// Функция для рисования заглавных русских букв. Высотой 8px.
// Функция принимает заглавные латинские буквы, без пробелов и прочих знаков,
// Оканчивается слово добавлением символа "ноль".
// Пример: Write_8px ("TEKST0", 180, 135);
// A - A; J - Ж; N - Н; F - Ф; y - Ы;
// B - Б; Z - З; О - О; H - Х; b - Ь;
// V - В; I - И; P - П; Q - Ц; e - Э;
// G - Г; i - Й; R - Р; с - Ч; u - Ю;
// D - Д; K - K; S - С; w - Ш; Y - Я.
// E - E; L - Л; Т - Т; W - Щ;
// ~ - Ё; M - M; U - У; j - Ъ;
{
int p=-8; //Межбуквенный интервал (Начинаем с -9,так как первый же цикл прибавит 9px)
byte a; //Переменная для подсчета количества переданных в функцию символов.
byte z=0;
{for (a=0;latters[a]!='0';a++);} //Подсчитываем символы в массиве, перебирая значения,
// пока не доходим до стоп-символа '0'
for (z=0; z < a; z++) //Основной блок и счетик.
//Переберает буквы в массиве аргументе функции.
{
if (latters[z] == 'A')
{p=p+8; // Переменная для сдвига следующего символа вправо по оси Х.
// В некоторых буквах подстроена вручную.
myGLCD.drawVLine (x1+1+p,y1+3,4);
myGLCD.drawVLine (x1+6+p,y1+3,4);
myGLCD.drawHLine (x1+2+p,y1+5,3);
myGLCD.drawHLine (x1+3+p,y1+1,1);
myGLCD.drawPixel (x1+p+2, y1+2);
myGLCD.drawPixel (x1+p+5, y1+2);
}
if (latters[z] == 'B')
{p=p+8;
myGLCD.drawVLine (x1+1+p,y1+1,6);
myGLCD.drawVLine (x1+5+p,y1+5,1);
myGLCD.drawHLine (x1+2+p,y1+1,3);
myGLCD.drawHLine (x1+2+p,y1+4,2);
myGLCD.drawHLine (x1+2+p,y1+7,2);
}
if (latters[z] == 'V')
{p=p+7;
myGLCD.drawVLine (x1+1+p,y1+1,6);
myGLCD.drawVLine (x1+4+p,y1+2,1);
myGLCD.drawVLine (x1+4+p,y1+5,1);
myGLCD.drawHLine (x1+2+p,y1+1,1);
myGLCD.drawHLine (x1+2+p,y1+4,1);
myGLCD.drawHLine (x1+2+p,y1+7,1);
}
if (latters[z] == 'G')
{p=p+6;
myGLCD.drawVLine (x1+1+p,y1+1,6);
myGLCD.drawHLine (x1+2+p,y1+1,2);
}
if (latters[z] == 'D')
{p=p+7;
myGLCD.drawHLine (x1+1+p,y1+6,5);
myGLCD.drawVLine (x1+1+p,y1+7,1);
myGLCD.drawVLine (x1+6+p,y1+7,1);
myGLCD.drawVLine (x1+2+p,y1+2,3);
myGLCD.drawVLine (x1+5+p,y1+2,3);
myGLCD.fillRect (x1+3+p,y1+1,x1+4+p,y1+2);
}
if (latters[z] == 'E')
{p=p+8;
myGLCD.drawVLine (x1+1+p,y1+1,6);
myGLCD.drawHLine (x1+2+p,y1+1,2);
myGLCD.drawHLine (x1+2+p,y1+4,1);
myGLCD.drawHLine (x1+2+p,y1+7,3);
}
if (latters[z] == '~')
{p=p+8;
myGLCD.drawVLine (x1+1+p,y1+1,6);
myGLCD.drawHLine (x1+2+p,y1+1,2);
myGLCD.drawHLine (x1+2+p,y1+4,1);
myGLCD.drawHLine (x1+2+p,y1+7,3);
myGLCD.drawPixel (x1+2+p, y1-1);
myGLCD.drawPixel (x1+4+p, y1-1);
}
if (latters[z] == 'J')
{p=p+9;
myGLCD.drawVLine (x1+3+p,y1+1,6);
myGLCD.drawVLine (x1+0+p,y1+6,1);
myGLCD.drawVLine (x1+6+p,y1+6,1);
myGLCD.drawPixel (x1+0+p, y1+1);
myGLCD.drawPixel (x1+1+p, y1+2);
myGLCD.drawPixel (x1+6+p, y1+1);
myGLCD.drawPixel (x1+5+p, y1+2);
myGLCD.drawPixel (x1+1+p, y1+5);
myGLCD.drawPixel (x1+5+p, y1+5);
myGLCD.fillRect (x1+2+p,y1+4,x1+4+p,y1+3);
}
if (latters[z] == 'Z')
{p=p+8;
myGLCD.drawVLine (x1+5+p,y1+2,1);
myGLCD.drawVLine (x1+5+p,y1+5,1);
myGLCD.drawHLine (x1+3+p,y1+1,1);
myGLCD.drawHLine (x1+2+p,y1+7,2);
myGLCD.drawPixel (x1+2+p, y1+2);
myGLCD.drawPixel (x1+4+p, y1+4);
myGLCD.drawPixel (x1+1+p, y1+6);
}
if (latters[z] == 'I')
{p=p+8;
myGLCD.drawVLine (x1+1+p,y1+1,6);
myGLCD.drawVLine (x1+5+p,y1+1,6);
myGLCD.drawPixel (x1+2+p, y1+5);
myGLCD.drawPixel (x1+3+p, y1+4);
myGLCD.drawPixel (x1+4+p, y1+3);
}
if (latters[z] == 'i')
{p=p+8;
myGLCD.drawVLine (x1+2+p,y1+1,6);
myGLCD.drawVLine (x1+6+p,y1+1,6);
myGLCD.drawPixel (x1+3+p, y1+5);
myGLCD.drawPixel (x1+4+p, y1+4);
myGLCD.drawPixel (x1+5+p, y1+3);
myGLCD.drawPixel (x1+4+p, y1+0);
}
if (latters[z] == 'K')
{p=p+8;
myGLCD.drawVLine (x1+1+p,y1+1,6);
myGLCD.drawPixel (x1+2+p, y1+4);
myGLCD.drawPixel (x1+3+p, y1+3);
myGLCD.drawPixel (x1+4+p, y1+2);
myGLCD.drawPixel (x1+5+p, y1+1);
myGLCD.drawPixel (x1+3+p, y1+5);
myGLCD.drawPixel (x1+4+p, y1+6);
myGLCD.drawPixel (x1+5+p, y1+7);
}
if (latters[z] == 'L')
{p=p+8;
myGLCD.drawVLine (x1+6+p,y1+1,6);
myGLCD.drawVLine (x1+3+p,y1+2,2);
myGLCD.drawVLine (x1+2+p,y1+4,3);
myGLCD.drawHLine (x1+4+p,y1+1,1);
myGLCD.drawPixel (x1+1+p, y1+7);
}
if (latters[z] == 'M')
{p=p+9;
myGLCD.drawVLine (x1+0+p,y1+4,3);
myGLCD.drawVLine (x1+6+p,y1+4,3);
myGLCD.drawVLine (x1+1+p,y1+1,2);
myGLCD.drawVLine (x1+3+p,y1+3,1);
myGLCD.drawVLine (x1+5+p,y1+1,2);
myGLCD.drawPixel (x1+2+p, y1+2);
myGLCD.drawPixel (x1+4+p, y1+2);
}
if (latters[z] == 'N')
{p=p+8;
myGLCD.drawVLine (x1+1+p,y1+1,6);
myGLCD.drawVLine (x1+5+p,y1+1,6);
myGLCD.drawHLine (x1+2+p,y1+4,2);
}
if (latters[z] == 'O')
{p=p+8;
myGLCD.drawVLine (x1+1+p,y1+2,4);
myGLCD.drawVLine (x1+5+p,y1+2,4);
myGLCD.drawHLine (x1+2+p,y1+1,2);
myGLCD.drawHLine (x1+2+p,y1+7,2);
}
if (latters[z] == 'P')
{p=p+7;
myGLCD.drawVLine (x1+2+p,y1+1,6);
myGLCD.drawVLine (x1+6+p,y1+1,6);
myGLCD.drawHLine (x1+3+p,y1+1,2);
}
if (latters[z] == 'R')
{p=p+8;
myGLCD.drawVLine (x1+1+p,y1+1,6);
myGLCD.drawVLine (x1+5+p,y1+2,1);
myGLCD.drawHLine (x1+2+p,y1+1,2);
myGLCD.drawHLine (x1+2+p,y1+4,2);
}
if (latters[z] == 'S')
{p=p+8;
myGLCD.drawVLine (x1+1+p,y1+2,4);
myGLCD.drawHLine (x1+2+p,y1+1,2);
myGLCD.drawHLine (x1+2+p,y1+7,2);
myGLCD.drawPixel (x1+5+p, y1+2);
myGLCD.drawPixel (x1+5+p, y1+6);
}
if (latters[z] == 'T')
{p=p+7;
myGLCD.drawVLine (x1+3+p,y1+2,5);
myGLCD.drawHLine (x1+1+p,y1+1,4);
}
if (latters[z] == 'U')
{p=p+8;
myGLCD.drawVLine (x1+1+p,y1+1,1);
myGLCD.drawVLine (x1+5+p,y1+1,2);
myGLCD.drawVLine (x1+4+p,y1+4,1);
myGLCD.drawHLine (x1+1+p,y1+7,1);
myGLCD.drawPixel (x1+2+p, y1+3);
myGLCD.drawPixel (x1+3+p, y1+4);
myGLCD.drawPixel (x1+3+p, y1+6);
}
if (latters[z] == 'F')
{p=p+9;
myGLCD.drawVLine (x1+0+p,y1+3,2);
myGLCD.drawVLine (x1+6+p,y1+3,2);
myGLCD.drawVLine (x1+3+p,y1+1,6);
myGLCD.drawHLine (x1+1+p,y1+2,4);
myGLCD.drawHLine (x1+1+p,y1+6,4);
}
if (latters[z] == 'H')
{p=p+7;
myGLCD.drawVLine (x1+2+p,y1+1,1);
myGLCD.drawVLine (x1+6+p,y1+1,1);
myGLCD.drawVLine (x1+2+p,y1+6,1);
myGLCD.drawVLine (x1+6+p,y1+6,1);
myGLCD.drawPixel (x1+3+p, y1+3);
myGLCD.drawPixel (x1+5+p, y1+3);
myGLCD.drawPixel (x1+4+p, y1+4);
myGLCD.drawPixel (x1+3+p, y1+5);
myGLCD.drawPixel (x1+5+p, y1+5);
}
if (latters[z] == 'Q')
{p=p+8;
myGLCD.drawVLine (x1+1+p,y1+1,6);
myGLCD.drawVLine (x1+5+p,y1+1,5);
myGLCD.drawHLine (x1+2+p,y1+7,4);
myGLCD.drawPixel (x1+6+p, y1+8);
}
if (latters[z] == 'b')
{p=p+8;
myGLCD.drawVLine (x1+2+p,y1+1,6);
myGLCD.drawVLine (x1+6+p,y1+5,1);
myGLCD.drawHLine (x1+3+p,y1+4,2);
myGLCD.drawHLine (x1+3+p,y1+7,2);
}
if (latters[z] == 'y')
{p=p+9;
myGLCD.drawVLine (x1+0+p,y1+1,6);
myGLCD.drawVLine (x1+4+p,y1+5,1);
myGLCD.drawVLine (x1+6+p,y1+1,6);
myGLCD.drawHLine (x1+1+p,y1+4,2);
myGLCD.drawHLine (x1+1+p,y1+7,2);
}
if (latters[z] == 'j')
{p=p+9;
myGLCD.drawVLine (x1+2+p,y1+1,6);
myGLCD.drawVLine (x1+6+p,y1+5,1);
myGLCD.drawHLine (x1+3+p,y1+4,2);
myGLCD.drawHLine (x1+3+p,y1+7,2);
myGLCD.drawPixel (x1+1+p, y1+1);
myGLCD.drawPixel (x1+0+p, y1+1);
}
if (latters[z] == 'c')
{p=p+8;
myGLCD.drawVLine (x1+1+p,y1+1,2);
myGLCD.drawVLine (x1+5+p,y1+1,6);
myGLCD.drawHLine (x1+2+p,y1+4,2);
}
if (latters[z] == 'w')
{p=p+8;
myGLCD.drawVLine (x1+1+p,y1+1,5);
myGLCD.drawVLine (x1+5+p,y1+1,5);
myGLCD.drawVLine (x1+3+p,y1+2,4);
myGLCD.drawHLine (x1+1+p,y1+7,4);
}
if (latters[z] == 'W')
{p=p+8;
myGLCD.drawVLine (x1+1+p,y1+1,5);
myGLCD.drawVLine (x1+3+p,y1+2,4);
myGLCD.drawVLine (x1+5+p,y1+1,5);
myGLCD.drawHLine (x1+1+p,y1+7,5);
myGLCD.drawPixel (x1+6+p, y1+8);
}
if (latters[z] == 'e')
{p=p+8;
myGLCD.drawVLine (x1+5+p,y1+2,4);
myGLCD.drawHLine (x1+2+p,y1+1,2);
myGLCD.drawHLine (x1+2+p,y1+7,2);
myGLCD.drawHLine (x1+3+p,y1+4,1);
myGLCD.drawPixel (x1+1+p, y1+2);
myGLCD.drawPixel (x1+1+p, y1+6);
}
if (latters[z] == 'u')
{p=p+8;
myGLCD.drawVLine (x1+1+p,y1+1,6);
myGLCD.drawVLine (x1+3+p,y1+2,4);
myGLCD.drawVLine (x1+6+p,y1+2,4);
myGLCD.drawHLine (x1+4+p,y1+1,1);
myGLCD.drawHLine (x1+4+p,y1+7,1);
myGLCD.drawPixel (x1+2+p, y1+4);
}
if (latters[z] == 'Y')
{p=p+8;
myGLCD.drawVLine (x1+6+p,y1+1,6);
myGLCD.drawVLine (x1+2+p,y1+2,1);
myGLCD.drawHLine (x1+3+p,y1+1,2);
myGLCD.drawHLine (x1+3+p,y1+4,2);
myGLCD.drawPixel (x1+4+p, y1+5);
myGLCD.drawPixel (x1+3+p, y1+6);
myGLCD.drawPixel (x1+2+p, y1+7);
}
}
};
int small_counter (int x, int y, byte count_number, boolean i, int r,int g, int b)
// Счетчик 2х разрядных чисел 4х7 px.
{ // При вызове функции i=0
byte a,c; // r,g,b цвет цифр счетчика
a = count_number % 10 ; //Единицы счетчика.
c = (count_number /10) % 10 ; //Десятки счетчик
myGLCD.setColor(VGA_BLACK); // Выбираем черный (цвет фона)
myGLCD.fillRect(x,y-1,x+4,y+9); // Закрашиваем место будующей цифры, с запасом по 1 px сверху и снизу.
myGLCD.setColor(r,g,b); // Выбираем цвет цифры.
{
if (a == 1)
{
myGLCD.drawVLine (x+3,y+1,6);
myGLCD.drawPixel (x+2, y+2);
myGLCD.drawPixel (x+1, y+3);
}
if (a == 2)
{
myGLCD.drawVLine (x+4,y+2,2);
myGLCD.drawHLine (x+2,y+1,1);
myGLCD.drawHLine (x+2,y+5,1);
myGLCD.drawHLine (x+1,y+7,3);
myGLCD.drawPixel (x+1, y+2);
myGLCD.drawPixel (x+1, y+6);
}
if (a == 3)
{
myGLCD.drawVLine (x+4,y+2,1);
myGLCD.drawVLine (x+4,y+5,1);
myGLCD.drawHLine (x+2,y+1,1);
myGLCD.drawHLine (x+2,y+7,1);
myGLCD.drawPixel (x+1, y+2);
myGLCD.drawPixel (x+3, y+4);
myGLCD.drawPixel (x+1, y+6);
}
if (a == 4)
{
myGLCD.drawVLine (x+3,y+1,6);
myGLCD.drawVLine (x+2,y+2,1);
myGLCD.drawHLine (x+1,y+5,3);
myGLCD.drawPixel (x+1, y+4);
}
if (a == 5)
{
myGLCD.drawVLine (x+4,y+4,2);
myGLCD.drawHLine (x+1,y+1,3);
myGLCD.drawHLine (x+1,y+3,2);
myGLCD.drawHLine (x+2,y+7,1);
myGLCD.drawPixel (x+1, y+6);
myGLCD.drawPixel (x+1, y+2);
}
if (a == 6)
{
myGLCD.drawVLine (x+1,y+2,4);
myGLCD.drawVLine (x+4,y+5,1);
myGLCD.drawHLine (x+2,y+1,1);
myGLCD.drawHLine (x+2,y+4,1);
myGLCD.drawHLine (x+2,y+7,1);
myGLCD.drawPixel (x+4, y+2);
}
if (a == 7)
{
myGLCD.drawVLine (x+4,y+2,1);
myGLCD.drawVLine (x+3,y+3,2);
myGLCD.drawVLine (x+2,y+5,2);
myGLCD.drawHLine (x+1,y+1,3);
}
if (a == 8)
{
myGLCD.drawVLine (x+1,y+2,1);
myGLCD.drawVLine (x+4,y+2,1);
myGLCD.drawVLine (x+1,y+5,1);
myGLCD.drawVLine (x+4,y+5,1);
myGLCD.drawHLine (x+2,y+1,1);
myGLCD.drawHLine (x+2,y+4,1);
myGLCD.drawHLine (x+2,y+7,1);
}
if (a == 9)
{
myGLCD.drawVLine (x+4,y+2,4);
myGLCD.drawVLine (x+1,y+2,1);
myGLCD.drawHLine (x+2,y+1,1);
myGLCD.drawHLine (x+2,y+4,1);
myGLCD.drawHLine (x+2,y+7,1);
myGLCD.drawPixel (x+1, y+6);
}
if (a == 0)
{
myGLCD.drawVLine (x+1,y+2,4);
myGLCD.drawVLine (x+4,y+2,4);
myGLCD.drawHLine (x+2,y+1,1);
myGLCD.drawHLine (x+2,y+7,1);
}
if (i==1){return 0;};
if (c==0){return 0;};
}
small_counter (x-6, y, c+10, 1, r,g,b);
}
//мини-функция для нужд наполнения массива суточной температуры.
int hour_minus (int a){
int h;
if (a>4){h = a-4;};
if (a<4){h = 20+a;};
if (a==4){h = 0;};
return (h);
};
|
|