#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
ili9341-cap-touch