aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2022-03-27 13:20:10 +0100
committerdakkar <dakkar@thenautilus.net>2022-03-27 13:20:10 +0100
commit9a7e710a2c7d4ba01b303e242edb56fdf1715c4f (patch)
treeb534ffcc782ef84a4e626cec872fd454363260b9
parentlow power co2 reading (diff)
downloadenv-sensor-9a7e710a2c7d4ba01b303e242edb56fdf1715c4f.tar.gz
env-sensor-9a7e710a2c7d4ba01b303e242edb56fdf1715c4f.tar.bz2
env-sensor-9a7e710a2c7d4ba01b303e242edb56fdf1715c4f.zip
low power pm
-rw-r--r--pm.h33
1 files changed, 32 insertions, 1 deletions
diff --git a/pm.h b/pm.h
index 634c1b4..9c8a508 100644
--- a/pm.h
+++ b/pm.h
@@ -4,11 +4,27 @@
#include "data.h"
+/*
+start measuring
+
+read once, stop, sleep
+
+ready?
+ if (now-last measurements) < read_interval, no
+ else: start measuring, return ready status
+ */
+
class PM {
private:
uint8_t auto_clean_days;
+ unsigned long last_measurment_millis;
+ unsigned long read_interval_millis;
public:
- PM(uint8_t acd=4) :auto_clean_days(acd) {}
+ PM(uint8_t acd=4, unsigned long ri=30000) :
+ auto_clean_days(acd),
+ last_measurment_millis(0),
+ read_interval_millis(ri)
+ {}
void start() {
// this will try to re-init Wire, emit a warning, and carry on
@@ -37,6 +53,16 @@ public:
uint16_t data_ready;
int16_t ret;
+ // have we read recently?
+ unsigned long now=millis();
+ // that first check is in case of overflow & rollover
+ if (now > last_measurment_millis && (now - last_measurment_millis) < read_interval_millis) {
+ return false;
+ }
+
+ sps30_wake_up();
+ sps30_start_measurement();
+
ret = sps30_read_data_ready(&data_ready);
if (ret < 0) {
Serial.print("PM reading data-ready flag error: ");
@@ -58,6 +84,11 @@ public:
if (ret <0) {
Serial.print("PM reading measurement error: ");
Serial.println(ret);
+ return;
}
+
+ last_measurment_millis = millis();
+ sps30_stop_measurement();
+ sps30_sleep();
}
};