#include <TFT_eSPI.h>
#include <SPI.h>       // this is needed for display
#include <Wire.h>      // this is needed for FT6206
#include <Adafruit_FT6206.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <Arduino_JSON.h>
#include "DSEG14_18.h" //Шрифт LCD
#include "Font4x5Fixed.h"
#include "Font5x5Fixed.h"

#define FF49 &DSEG14_Classic_Regular_18
#define FF4A &Font4x5Fixed
#define FF4B &Font5x5Fixed

Adafruit_FT6206 ctp = Adafruit_FT6206(); // The FT6206 uses hardware I2C (SCL/SDA)
#define TFT_CS 15 // The display also uses hardware SPI, plus #9 & #10
#define TFT_DC 2
#define TFT_MOSI 23
#define TFT_SCLK 18
TFT_eSPI tft = TFT_eSPI(); // Invoke custom library with default width and height

#define TFT_LIGHTBLACK    0x31A6      /* 36, 36, 36 */
#define TFT_DARKRED       0xB800      /* BD, 00, 00 */
#define TFT_DARKBLUE      0x0010      /* 00, 00, 84 */
#define TFT_R_ORANGE      0xFAC0


int impulseCost = 10;
int  firstValue = 195780;
float firstValueF;

long currentSec;
long previousSec;

String CounterName[] = {"5709123", "5709121"};
int water_stat [24][24] = {{100, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0},
  {13, 0, 0, 0, 0, 0, 0, 12, 0, 14, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0}};

int _firstValue [] = {256700, 195780};
int hour = 0;









void setup(void) {
  Serial.begin(115200);
  tft.begin();
  if (!ctp.begin(40)) {  // pass in 'sensitivity' coefficient
    Serial.println("Couldn't start FT6206 touchscreen controller");
    while (1);
  }
  
  initScreen ();
  drawValue ();

}

void loop() {


  // currentSec = millis();

  // if (currentSec - previousSec > 1000) { // ---------- 1 СЕКУНДА
     if (hour > 23) hour = 0;
    water_stat [0][hour] = int(random(1000));
    water_stat [1][hour] = int(random(1000));
    Serial.println(water_stat [0][hour],water_stat [1][hour]);
     drawGraph(hour);
    hour++;
delay(1000);
  //  previousSec = currentSec;
 // }


} //-------------------------------------------------------------

void initScreen () {
  tft.fillScreen(TFT_BLACK); //background(0);
  //tft.setFreeFont(FF4B);   // textFont(Ac437_EverexME_7x8, 8);
  tft.setTextFont(1);
  tft.drawRoundRect(0,0,128,12, 2, TFT_SILVER);   //  Рамка часов
  tft.drawRoundRect(61,11,67,13, 2, TFT_SILVER);  //  Рамка иконок

  tft.setCursor(2, 16);                             // ----------------------------------
  tft.setTextColor(TFT_CYAN, TFT_BLACK);            //
  tft.print("#");                                   //
  tft.setTextColor(TFT_YELLOW, TFT_BLACK);          //  Холодный счетчик
  tft.print(CounterName[0]); 
  tft.fillRoundRect(0,24,128,22, 2, TFT_DARKBLUE);                       //
  tft.drawRoundRect(0,24,128,22, 2, TFT_BLUE);      // ----------------------------------

  tft.setCursor(2, 48);                             // ----------------------------------
  tft.setTextColor(TFT_CYAN, TFT_BLACK);            //
  tft.print("#");                                   //   Горячий счетчик
  tft.setTextColor(TFT_YELLOW, TFT_BLACK);          //
  tft.print(CounterName[1]);                        //
  tft.fillRoundRect(0,56,128,22, 2, TFT_DARKRED);
  tft.drawRoundRect(0,56,128,22, 2, TFT_RED);       // ----------------------------------

  //tft.setFreeFont();
}



void drawValue () {


      tft.setFreeFont(FF49);

      tft.setTextColor(TFT_LIGHTBLACK); 
      tft.setCursor(0, 44); 
      tft.print(F("00000.000")); 
      tft.setCursor(0, 44); 
      tft.print(F("*****.***"));
      tft.setTextColor(TFT_WHITE, TFT_TRANSPARENT);
      tft.setCursor(0, 44);
      tft.print(F("00143.211")); 

      tft.setTextColor(TFT_LIGHTBLACK); 
      tft.setCursor(0, 76); 
      tft.print(F("00000.000")); 
      tft.setCursor(0, 76); 
      tft.print(F("*****.***"));
      tft.setTextColor(TFT_WHITE, TFT_TRANSPARENT);
      tft.setCursor(0, 76);
      tft.print(F("00109.777"));

      tft.setFreeFont();
      tft.setTextFont(1);


}



void drawGraph(int current_h)   
{
  Serial.println("---tic---");
  int x = 5, y = 77, w = 127, h = 50; // область графика
  int max_vol = 30;
  int max_vol_w = 0;
  int hours=0, d;
  int resolution = 0;

      tft.setFreeFont(FF4A);



tft.fillRect(0,79,127,51, TFT_BLACK); // стереть график

  for (int i = 0; i < 24; i++)
  { // вычисляем максимальное значение за 24 часа для расчета значение max
    if (max_vol_w < water_stat [0][i]) {
      max_vol_w = (int)water_stat [0][i];
    }
    if (max_vol_w < water_stat [1][i]) {
      max_vol_w = (int)water_stat [1][i];
    }
  }

  //resolution = max_vol_w/max_vol; // Рассчитаем цену для одного пиксела (литров/на пиксел) а у нас их всего 30 пикселов
                                  // ДЕБИЛ ИСПОЛЬЗУЙ ФУНКЦИЮ map() !!!!!!!!!!!!!!

  //-------- Отрисовка области графика с заголовком
  
  tft.setTextColor(TFT_WHITE, TFT_BLACK);
  
  tft.setCursor(x+30, y+7+2);
  tft.print(F("DAILY GRAPHIC:"));

  tft.drawFastHLine(x-5, y+10, w, TFT_LIGHTGREY);
  tft.setCursor(x-5,y+7+2);
  tft.print(max_vol_w);


  current_h += 1; // добавим час, так как он уже наступил

  while ( hours < 24) // обрабатываем за сутки
  {
    if (current_h > 23) {
      current_h = 0;
    } // перескок полуночи
    if (current_h % 2 == 0) { // деление с остатком для вывода четных часов на шкалу
      if (current_h < 10) {
        d=2;
      } else {
        d=0;
      } // сдвинуть цыфры (часы), если 1 значное цыфра на d точек

        tft.setCursor (x+d+(w-6)/24*hours-1,y+h-10+2+7); tft.print(current_h);}
    }

    if (water_stat[0][current_h] > 0) { // не обрабатываем нулевые значения -> НЕ РИСУЕМ
      int bar_h = (int)map(water_stat[0][current_h], 0, max_vol_w, 0, max_vol); 
      tft.fillRect(x+(w-7)/24*hours,  y+h-8-bar_h,2,bar_h,TFT_BLUE);}
      
     // Serial.println ((int)water_stat[0][current_h]+"-->" + (int)map(water_stat[0][current_h],0, max_vol_w, 0, 30)+" res:"+resolution+"\n----------");
      
    
    if (water_stat[1][current_h] > 0) { // не обрабатываем нулевые значения -> НЕ РИСУЕМ
      int bar_h = (int)map(water_stat[1][current_h], 0, max_vol_w, 0, max_vol); 
      tft.fillRect(x+(w-7)/24*hours+2,y+h-8-bar_h,2,bar_h,TFT_RED);}

    

    current_h++;
    hours++;
  

 /* stroke (125);
  line(x-5, y+10, w, y+10);
  line(x-1, y+h-9, w-1, y+h-9);
  line(x-1, y+h-9, x-1, y+10);

  for (int i = 0; i < max_vol; i+= max_vol/10) {
    line(x-2, y+h-10-i, x-1, y+h-10-i);
  }
  for (int i = 0; i < 25; i++) {
    line(x-1+(w-7)/24*i, y+h-10-1, x-1+(w-7)/24*i, y+h-10+2);
  }
 */

  tft.drawFastVLine(x-1,y+10, 30, TFT_LIGHTGREY);
  tft.drawFastHLine(x-1,y+h-10, w-x, TFT_LIGHTGREY);


  for (int i = 0; i < max_vol; i+= max_vol/10){tft.drawFastHLine(x-2,y+h-10-i, 2, TFT_LIGHTGREY);}
  for (int i = 0; i < 25; i++){tft.drawFastVLine(x-1+(w-7)/24*i,y+h-10-1, 3, TFT_LIGHTGREY);}

tft.setFreeFont();


}

Loading
ili9341-cap-touch