aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2022-03-27 13:32:52 +0100
committerdakkar <dakkar@thenautilus.net>2022-03-27 13:32:52 +0100
commit21190f0e08161af62fa620a96582dc085919a071 (patch)
treefa3ef20545c351b5f47ff31032d5491c80bfd28e
parentdon't show negative particle counts (diff)
downloadenv-sensor-21190f0e08161af62fa620a96582dc085919a071.tar.gz
env-sensor-21190f0e08161af62fa620a96582dc085919a071.tar.bz2
env-sensor-21190f0e08161af62fa620a96582dc085919a071.zip
fix pm low power reading
-rw-r--r--pm.h21
1 files changed, 16 insertions, 5 deletions
diff --git a/pm.h b/pm.h
index 9c8a508..4bfc10c 100644
--- a/pm.h
+++ b/pm.h
@@ -19,11 +19,13 @@ private:
uint8_t auto_clean_days;
unsigned long last_measurment_millis;
unsigned long read_interval_millis;
+ bool awake;
public:
PM(uint8_t acd=4, unsigned long ri=30000) :
auto_clean_days(acd),
last_measurment_millis(0),
- read_interval_millis(ri)
+ read_interval_millis(ri),
+ awake(false)
{}
void start() {
@@ -47,6 +49,8 @@ public:
if (ret < 0) {
Serial.print("PM starting measurement error\n");
}
+
+ awake=true;
}
bool dataReady() {
@@ -55,13 +59,19 @@ public:
// 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) {
+ if (
+ last_measurment_millis > 0 && // have we measured once at least?
+ now > last_measurment_millis && // has there been no overflow & rollover?
+ (now - last_measurment_millis) < read_interval_millis // is it too soon?
+ ) {
return false;
}
- sps30_wake_up();
- sps30_start_measurement();
+ if (!awake) {
+ sps30_wake_up();
+ sps30_start_measurement();
+ awake=true;
+ }
ret = sps30_read_data_ready(&data_ready);
if (ret < 0) {
@@ -90,5 +100,6 @@ public:
last_measurment_millis = millis();
sps30_stop_measurement();
sps30_sleep();
+ awake=false;
}
};