From 3443edf23337fb5d9ce63075ead80c4779cf823a Mon Sep 17 00:00:00 2001 From: dakkar Date: Sun, 27 Mar 2022 12:48:36 +0100 Subject: break code into logical components --- main.ino | 174 ++++++++++----------------------------------------------------- 1 file changed, 28 insertions(+), 146 deletions(-) (limited to 'main.ino') diff --git a/main.ino b/main.ino index ce9f981..8dcb387 100644 --- a/main.ino +++ b/main.ino @@ -1,164 +1,46 @@ #include -#include -#include #include -#define LILYGO_T5_V213 // needed for the display libraries - -#include -#include -#include // screen model, probably correct -#include -#include -#include - +#include "data.h" #include "battery.h" +#include "display.h" +#include "co2.h" +#include "pm.h" -GxIO_Class io(SPI, EPD_CS, EPD_DC, EPD_RSET); -GxEPD_Class display(io, EPD_RSET, EPD_BUSY); -SPIClass SDSPI(VSPI); // for sdcard - -SensirionI2CScd4x scd4x; - -Battery batt; - -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.print(co2); +Battery battery; +PM pm; +CO2 co2; - display.setCursor(100,20); - display.print("t"); - display.print(temperature,1); +SensorData data; - display.setCursor(150,20); - display.print(" h"); - display.print(humidity,0); - display.print("%"); - - display.setCursor(0,45); - display.println(" PM"); - display.print(" 1.0 "); display.println(m.mc_1p0,1); - display.print(" 2.5 "); display.println(m.mc_2p5,1); - display.print(" 4.0 "); display.println(m.mc_4p0,1); - display.print("10.0 "); display.println(m.mc_10p0,1); - - display.setCursor(100,45); - display.print("Batt "); display.print(batt.voltage()); - - // "partial" update - display.updateWindow(0, 0, GxEPD_WIDTH, GxEPD_HEIGHT, false); -} +Display display; void setup() { + Serial.begin(115200); + while (!Serial) { + delay(100); + } - Serial.begin(115200); - while (!Serial) { - delay(100); - } - - // the board's definition says SCL=23, but I have SCL=22 - Wire.begin(21,22); - - SPI.begin(EPD_SCLK, EPD_MISO, EPD_MOSI); - - display.init(); - display.setTextColor(GxEPD_BLACK); - display.setRotation(3); - display.setFont(&FreeMonoBold9pt7b); + // the board's definition says SCL=23, but I have SCL=22 + Wire.begin(21,22); - showThings(); + display.start(); + display.show(&data); - uint16_t error; - char errorMessage[256]; + battery.start(); + co2.start(); + pm.start(); + Serial.println("Waiting for first measurement... (5 sec)"); - scd4x.begin(Wire); - - // stop potentially previously started measurement - error = scd4x.stopPeriodicMeasurement(); - if (error) { - Serial.print("Error trying to execute stopPeriodicMeasurement(): "); - errorToString(error, errorMessage, 256); - Serial.println(errorMessage); - } - - error = scd4x.setAutomaticSelfCalibration(1); - if (error) { - Serial.print("Error trying to execute setAutomaticSelfCalibration(): "); - errorToString(error, errorMessage, 256); - Serial.println(errorMessage); - } - - // Start Measurement - error = scd4x.startPeriodicMeasurement(); - if (error) { - Serial.print("Error trying to execute startPeriodicMeasurement(): "); - errorToString(error, errorMessage, 256); - Serial.println(errorMessage); - } - - // this will try to re-init Wire, emit a warning, and carry on - sensirion_i2c_init(); - - while (sps30_probe() != 0) { - Serial.print("SPS sensor probing failed\n"); - delay(500); - } - - int16_t ret; - uint8_t auto_clean_days = 4; - uint32_t auto_clean; - - ret = sps30_set_fan_auto_cleaning_interval_days(auto_clean_days); - if (ret) { - Serial.print("error setting the auto-clean interval: "); - Serial.println(ret); - } - - ret = sps30_start_measurement(); - if (ret < 0) { - Serial.print("error starting measurement\n"); - } - - Serial.println("Waiting for first measurement... (5 sec)"); + delay(5000); } void loop() { - uint16_t error; - char errorMessage[256]; - - delay(5000); - - error = scd4x.readMeasurement(co2, temperature, humidity); - - char serial[SPS30_MAX_SERIAL_LEN]; - uint16_t data_ready; - int16_t ret; - - do { - ret = sps30_read_data_ready(&data_ready); - if (ret < 0) { - Serial.print("error reading data-ready flag: "); - Serial.println(ret); - } else if (!data_ready) - Serial.print("data not ready, no new measurement available\n"); - else - break; - delay(100); /* retry in 100ms */ - } while (1); - - ret = sps30_read_measurement(&m); - - if (error || ret <0 || co2 ==0) { - return; - } + if (battery.dataReady()) battery.read(&data); + if (pm.dataReady()) pm.read(&data); + if (co2.dataReady()) co2.read(&data); - showThings(); + display.show(&data); + + delay(5000); } -- cgit v1.2.3