#pragma once #define LILYGO_T5_V213 // needed for the display libraries #include #include #include // screen model, probably correct #include #include #include #include "data.h" class Display { private: GxIO_Class io; GxEPD_Class display; public: Display() : io(SPI, EPD_CS, EPD_DC, EPD_RSET), display(io, EPD_RSET, EPD_BUSY) {} void start() { SPI.begin(EPD_SCLK, EPD_MISO, EPD_MOSI); display.init(); display.setTextColor(GxEPD_BLACK); display.setRotation(3); display.setFont(&FreeMonoBold9pt7b); } void show(const SensorData *data) { display.fillScreen(GxEPD_WHITE); display.setCursor(0,10); display.print("Co2 "); display.print(data->co2); display.setCursor(100,10); display.print("t"); display.print(data->temperature,1); display.setCursor(160,10); display.print(" h"); display.print(data->humidity,0); display.print("%"); display.setCursor(0,30); display.println(" PM"); // PM measurements include particles "up to" that size, but we // want to display the values for *that* size display.print(" 1.0 "); display.println(data->pm.mc_1p0,1); display.print(" 2.5 "); display.println(data->pm.mc_2p5 - data->pm.mc_1p0,1); display.print(" 4.0 "); display.println(data->pm.mc_4p0 - data->pm.mc_2p5,1); display.print("10.0 "); display.println(data->pm.mc_10p0 - data->pm.mc_4p0,1); display.setCursor(120,30); display.print("Batt "); display.print(data->batteryVoltage); // "partial" update display.updateWindow(0, 0, GxEPD_WIDTH, GxEPD_HEIGHT, false); } };