aboutsummaryrefslogtreecommitdiff
path: root/main.ino
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2022-03-27 12:48:36 +0100
committerdakkar <dakkar@thenautilus.net>2022-03-27 12:48:36 +0100
commit3443edf23337fb5d9ce63075ead80c4779cf823a (patch)
tree7010ca3559702ab816686d4fbc9c26f51a3b10c2 /main.ino
parentbattery voltage, move display around (diff)
downloadenv-sensor-3443edf23337fb5d9ce63075ead80c4779cf823a.tar.gz
env-sensor-3443edf23337fb5d9ce63075ead80c4779cf823a.tar.bz2
env-sensor-3443edf23337fb5d9ce63075ead80c4779cf823a.zip
break code into logical components
Diffstat (limited to 'main.ino')
-rw-r--r--main.ino174
1 files changed, 28 insertions, 146 deletions
diff --git a/main.ino b/main.ino
index ce9f981..8dcb387 100644
--- a/main.ino
+++ b/main.ino
@@ -1,164 +1,46 @@
#include <Arduino.h>
-#include <SensirionI2CScd4x.h>
-#include <sps30.h>
#include <Wire.h>
-#define LILYGO_T5_V213 // needed for the display libraries
-
-#include <boards.h>
-#include <GxEPD.h>
-#include <GxGDEH0213B73/GxGDEH0213B73.h> // screen model, probably correct
-#include <Fonts/FreeMonoBold9pt7b.h>
-#include <GxIO/GxIO_SPI/GxIO_SPI.h>
-#include <GxIO/GxIO.h>
-
+#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);
}