Суточный график (температуры)





    Набор функций рисует график суточной температуры.
  Требуются модуль часов реального времени и датчик (-и) температуры. Данные о температуре считываются в массивы. Далее, данные сортируются таким образом, чтобы в конце массива, находилась температура текущего часа, после чего пересобранные массивы передаются в функцию отрисовки графика. Переменные t и w, для комнатной температуры и влажности. Переменные T и W, для уличных показателей. Нумерация часов, по оси Х так же, пересчитывается с тем расчетом, чтобы справа был текущий час. То есть при 16:38, там будет 17.

  Для опроса датчика DHT22, используется функция, частично использующая код библиотеки iarduino_DHT, со значительными исправлениями.

  Перед запуском функции нужно указать указателям на адрес памяти глобальных переменных влажности и температуры, функции указать номер пина к которому подключен датчик.
  Для работы с модулем часов используется библиотека iarduino_RTC скачать её можно по адресу: https://iarduino.ru/file/235.html

  Графиком можно рисовать не только температурные кривые. В данном примере, график принимает 25 точек. (Рисуется по 2 линии за раз, на основе трех точек, в варианте без сглаживания) Функция принимает множество аргументов. Но лучше придерживаться значений кратных 2 или 10. В текущем виде функция записана для экрана размером 320х240px. В типе 2, линия Х располагается внизу графика. В некоторых случаях, удобно подгонять график под значения, иногда имеет смысл подогнать данные под график, разделить или умножить на 2, 10 и т.д.

  График, далек от удобства использования... Это пока первая версия.

   Так же добавленны функции отрисовки шрифта и цифр


      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);
  };               
  
   

       Функции


   1. Графические.

    Зависимость: UTFT

   Cчетчик, один разряд (10 x 15 px )
    Зависимость: UTFT









   Изготовление рекламы Изготовление мебели  Общестроительные работы 3D моделирование       Статьи
  Благоустройство тер.
   Общее портфолио    Мебель для мастерской   Установка бордюров   Портфолио   Контакты
   Наружняя реклама       Фасадные работы   Модели   Образец договора
   Внутреняя реклама       Утепление гаража   Инфо
   Таблички, наклейки       Косметический ремонт   Фото г.Надым
  Бетонные работы   Фото пригороды г.Надым