#include <TFT_eSPI.h>
#include <DHT.h>
#include "User_Setup.h"
#include "Free_Fonts.h"
TFT_eSPI tft = TFT_eSPI();
TFT_eSprite sprBattery = TFT_eSprite(&tft);
const uint8_t degreeChar[] = {
0b00111000, // ###
0b01000100, // # #
0b01000100, // # #
0b00111000, // ###
0b00000000, //
0b00000000, //
0b00000000, //
0b00000000 //
};
#define POT_BATT 34
#define DHT_OUT_DATA 32
#define DHT_IN_DATA 33
#define DHT_TYPE DHT22
DHT dhtOut(DHT_OUT_DATA, DHT_TYPE);
DHT dhtIn(DHT_IN_DATA, DHT_TYPE);
void setup() {
tft.init();
tft.setRotation(1);
initDisplay();
dhtOut.begin();
dhtIn.begin();
tft.setFreeFont(&FreeSans9pt7b);
// sprite dla baterii
sprBattery.setColorDepth(16);
sprBattery.createSprite(304, 35);
sprBattery.fillSprite(TFT_BLACK);
}
void loop() {
// odczyt potencjometru baterii
int battRaw = analogRead(POT_BATT);
int battPerc = map(battRaw, 0, 4095, 0, 100);
float outTemp = dhtOut.readTemperature();
float outHum = dhtOut.readHumidity();
float inTemp = dhtIn.readTemperature();
float inHum = dhtIn.readHumidity();
drawBattery(battPerc);
drawValues(outTemp, inTemp, outHum, inHum);
delay(2000);
}
void initDisplay() {
tft.fillScreen(TFT_BLACK);
// główne pola
tft.fillRect( 0, 0, 320, 240, TFT_BLUE);
tft.fillRect( 4, 4, 312, 75, TFT_SKYBLUE);
tft.fillRect( 4, 84, 154, 74, TFT_DARKCYAN);
tft.fillRect(162, 84, 154, 74, TFT_OLIVE);
tft.fillRect( 4, 162, 154, 74, TFT_DARKCYAN);
tft.fillRect(162, 162, 154, 74, TFT_OLIVE);
tft.setFreeFont(&FreeSansBoldOblique9pt7b);
tft.setTextColor(TFT_BLACK, TFT_SKYBLUE);
tft.drawString("Battery Voltage:", 10, 10);
tft.setTextColor(TFT_WHITE, TFT_DARKCYAN);
tft.drawString("OUT Temp:", 10, 88);
tft.drawString("IN Temp:", 10, 168);
tft.setTextColor(TFT_WHITE, TFT_OLIVE);
tft.drawString("OUT Humidity:", 167, 88);
tft.drawString("IN Humidity:", 167, 168);
}
void drawBattery(int percent) {
int w = sprBattery.width();
int h = sprBattery.height();
sprBattery.fillSprite(TFT_BLACK);
sprBattery.drawRect(0, 0, w, h, TFT_BLACK);
int fillW = map(percent, 0, 100, 0, w);
sprBattery.fillRect(1, 1, fillW, h - 2, TFT_GREEN);
sprBattery.fillRect(fillW, 1, w - fillW - 1, h - 2, TFT_RED);
sprBattery.setTextFont(4);
sprBattery.setTextDatum(MC_DATUM);
sprBattery.setTextColor(TFT_BLACK);
String text = String(percent) + "%";
sprBattery.drawString(text, w / 2 + 1, h / 2);
sprBattery.drawString(text, w / 2, h / 2);
sprBattery.pushSprite(8, 40);
}
void drawValues(int outT, int inT, int outH, int inH) {
tft.setFreeFont(&FreeSansBoldOblique24pt7b);
tft.setTextColor(TFT_BLACK, TFT_DARKCYAN);
tft.drawString(String(outT) + "°C", 50, 113); // OUT Temp
tft.drawString(String(inT) + "°C", 50, 191); // IN Temp
tft.setTextColor(TFT_BLACK, TFT_OLIVE);
tft.drawString(String(outH) + "%", 215, 113); // OUT Humidity
tft.drawString(String(inH) + "%", 215, 191); // IN Humidity
}
/*
outT | outH
inT | inH
*/Battery
Outdoor
Indoor