Загрузка данных


#include <Adafruit_GFX.h>    
#include <Adafruit_ST7735.h> 
#include <SPI.h>

// Твоя раскладка пинов
#define TFT_SCL        13  
#define TFT_SDA        12  
#define TFT_DC         14  
#define TFT_RST        27  
#define TFT_CS         26  

// Инициализируем программный SPI (CS, DC, SDA, SCL, RST)
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_SDA, TFT_SCL, TFT_RST);

// Расширенная палитра цветов RGB565
uint16_t DK_BLACK    = 0x0000;
uint16_t NEON_GREEN  = 0x07E0;
uint16_t DK_GREEN    = 0x0320;
uint16_t DK_GRAY     = 0x39E7;
uint16_t PURE_WHITE  = 0xFFFF;
uint16_t DEEP_RED    = 0xF800;
uint16_t ORANGE_GLOW = 0xFC00;

// Глобальные переменные
float current_temp = 38.2; // Начальная фейковая температура
int history[100]; // Массив для графика
int plot_index = 0;
bool activity_bar_state = false;

// Рисуем стильную иконку пламени (упрощенно)
void drawFlame(int x, int y, uint16_t color) {
  tft.fillTriangle(x+4, y+6, x+2, y+10, x+6, y+10, color); // Пламя
  tft.fillRect(x+2, y+11, 4, 3, color); // Основание
}

void setup() {
  tft.initR(INITR_BLACKTAB); 
  tft.setRotation(1); 
  tft.fillScreen(DK_BLACK);

  // Инициализация массива графика
  for(int i=0; i<100; i++) history[i] = random(30, 45);

  // Отрисовка статической части интерфейса
  tft.drawRect(0, 0, tft.width(), tft.height(), DK_GRAY);
  
  // Шапка (как у тебя на фото, но чуть тоньше)
  tft.setCursor(15, 10);
  tft.setTextColor(NEON_GREEN);
  tft.setTextSize(1);
  tft.print("MONITOR SYSTEM v2.0");

  tft.drawLine(10, 23, tft.width()-10, 23, DK_GRAY);
}

void loop() {
  // --- Динамический заголовок ---
  tft.setCursor(55, 30);
  tft.setTextColor(DK_GRAY);
  tft.print("CPU TEMP");

  // --- Основной виджет ---
  // Стираем старую цифру и иконку (локально)
  tft.fillRect(20, 38, 120, 35, DK_BLACK); 
  
  // Иконка пламени
  drawFlame(35, 48, ORANGE_GLOW); 

  // Крупная температура
  tft.setCursor(65, 45);
  tft.setTextColor(ORANGE_GLOW);
  tft.setTextSize(3); // Размер для 'секси' эффекта
  tft.print(current_temp, 1);
  tft.print("C");

  // --- Динамический график ---
  // Стираем старый график
  tft.fillRect(10, 75, 140, 40, DK_BLACK);
  
  // Рисуем сетку
  tft.drawRect(10, 75, 140, 40, DK_GRAY);
  for(int y=85; y<110; y+=10) tft.drawLine(10, y, 150, y, 0x18E3); // Тонкие линии

  // Отрисовка линии графика
  for (int i=0; i<99; i++) {
    int y0 = map(history[(plot_index + i) % 100], 20, 50, 110, 80);
    int y1 = map(history[(plot_index + i + 1) % 100], 20, 50, 110, 80);
    tft.drawLine(10 + (i * 1.4), y0, 11 + (i * 1.4), y1, DK_GREEN);
  }
  
  // Обновляем историю и график
  plot_index = (plot_index + 1) % 100;
  history[(plot_index + 99) % 100] = (int)current_temp;
  
  // Симуляция изменения температуры
  current_temp += random(-5, 6) / 10.0;
  if(current_temp > 45) current_temp = 38.0;
  if(current_temp < 32) current_temp = 39.0;

  // --- Бар активности ---
  if(activity_bar_state) tft.fillRect(2, tft.height()-5, tft.width()-4, 3, DK_GREEN);
  else tft.fillRect(2, tft.height()-5, tft.width()-4, 3, DK_BLACK);
  activity_bar_state = !activity_bar_state;

  delay(300); // Быстрое обновление для эффекта 'динамики'
}