From 762e9ce5c5d174c972d2171b5e96ebd1cad6507e Mon Sep 17 00:00:00 2001 From: dakkar Date: Sat, 12 Feb 2022 16:40:17 +0000 Subject: some sort of partial updates it's much faster, but the image is less "crisp" --- main.ino | 88 ++++++++++++++++++++++++++-------------------------------------- 1 file changed, 36 insertions(+), 52 deletions(-) diff --git a/main.ino b/main.ino index cb5d21a..bde8892 100644 --- a/main.ino +++ b/main.ino @@ -12,26 +12,40 @@ #include #include -GxIO_Class io(SPI, EPD_CS, EPD_DC, EPD_RSET); +GxIO_Class io(SPI, EPD_CS, EPD_DC, EPD_RSET); GxEPD_Class display(io, EPD_RSET, EPD_BUSY); -SPIClass SDSPI(VSPI); // for sdcard? maybe? - +SPIClass SDSPI(VSPI); // for sdcard SensirionI2CScd4x scd4x; -void printUint16Hex(uint16_t value) { - Serial.print(value < 4096 ? "0" : ""); - Serial.print(value < 256 ? "0" : ""); - Serial.print(value < 16 ? "0" : ""); - Serial.print(value, HEX); -} - -void printSerialNumber(uint16_t serial0, uint16_t serial1, uint16_t serial2) { - Serial.print("Serial: 0x"); - printUint16Hex(serial0); - printUint16Hex(serial1); - printUint16Hex(serial2); - Serial.println(); +uint16_t co2 = 0; +float temperature = 0.0f; +float humidity = 0.0f; +struct sps30_measurement m; + +void showThings(bool all=false) { + display.fillScreen(GxEPD_WHITE); + display.setCursor(0,20); + + display.print("Co2:"); + display.println(co2); + display.print("T:"); + display.print(temperature); + display.print(" H:"); + display.println(humidity); + + display.print("PM 1:"); + display.print(m.mc_1p0); + display.print(" PM 2.5:"); + display.println(m.mc_2p5); + + display.print("PM 4:"); + display.print(m.mc_4p0); + display.print(" PM 10:"); + display.println(m.mc_10p0); + + // "partial" update + display.updateWindow(0, 0, GxEPD_WIDTH, GxEPD_HEIGHT, false); } void setup() { @@ -50,8 +64,8 @@ void setup() { display.setTextColor(GxEPD_BLACK); display.setRotation(3); display.setFont(&FreeMonoBold9pt7b); - display.fillScreen(GxEPD_WHITE); - display.update(); + + showThings(); uint16_t error; char errorMessage[256]; @@ -66,18 +80,13 @@ void setup() { Serial.println(errorMessage); } - uint16_t serial0; - uint16_t serial1; - uint16_t serial2; - error = scd4x.getSerialNumber(serial0, serial1, serial2); + error = scd4x.setAutomaticSelfCalibration(1); if (error) { - Serial.print("Error trying to execute getSerialNumber(): "); + Serial.print("Error trying to execute setAutomaticSelfCalibration(): "); errorToString(error, errorMessage, 256); Serial.println(errorMessage); - } else { - printSerialNumber(serial0, serial1, serial2); } - + // Start Measurement error = scd4x.startPeriodicMeasurement(); if (error) { @@ -118,13 +127,8 @@ void loop() { delay(5000); - // Read Measurement - uint16_t co2 = 0; - float temperature = 0.0f; - float humidity = 0.0f; error = scd4x.readMeasurement(co2, temperature, humidity); - struct sps30_measurement m; char serial[SPS30_MAX_SERIAL_LEN]; uint16_t data_ready; int16_t ret; @@ -147,25 +151,5 @@ void loop() { return; } - display.fillScreen(GxEPD_WHITE); - display.setCursor(0,20); - - display.print("Co2:"); - display.println(co2); - display.print("T:"); - display.print(temperature); - display.print(" H:"); - display.println(humidity); - - display.print("PM 1:"); - display.print(m.mc_1p0); - display.print(" PM 2.5:"); - display.println(m.mc_2p5); - - display.print("PM 4:"); - display.print(m.mc_4p0); - display.print(" PM 10:"); - display.println(m.mc_10p0); - - display.update(); + showThings(); } -- cgit v1.2.3