diff options
Diffstat (limited to 'pm.h')
-rw-r--r-- | pm.h | 33 |
1 files changed, 32 insertions, 1 deletions
@@ -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(); } }; |