diff options
author | dakkar <dakkar@thenautilus.net> | 2022-03-27 12:48:36 +0100 |
---|---|---|
committer | dakkar <dakkar@thenautilus.net> | 2022-03-27 12:48:36 +0100 |
commit | 3443edf23337fb5d9ce63075ead80c4779cf823a (patch) | |
tree | 7010ca3559702ab816686d4fbc9c26f51a3b10c2 /pm.h | |
parent | battery voltage, move display around (diff) | |
download | env-sensor-3443edf23337fb5d9ce63075ead80c4779cf823a.tar.gz env-sensor-3443edf23337fb5d9ce63075ead80c4779cf823a.tar.bz2 env-sensor-3443edf23337fb5d9ce63075ead80c4779cf823a.zip |
break code into logical components
Diffstat (limited to 'pm.h')
-rw-r--r-- | pm.h | 63 |
1 files changed, 63 insertions, 0 deletions
@@ -0,0 +1,63 @@ +#pragma once + +#include <sps30.h> + +#include "data.h" + +class PM { +private: + uint8_t auto_clean_days; +public: + PM(uint8_t acd=4) :auto_clean_days(acd) {} + + void start() { + // this will try to re-init Wire, emit a warning, and carry on + sensirion_i2c_init(); + + while (sps30_probe() != 0) { + Serial.print("PM sensor probing failed\n"); + delay(500); + } + + int16_t ret; + + ret = sps30_set_fan_auto_cleaning_interval_days(auto_clean_days); + if (ret) { + Serial.print("PM setting the auto-clean interval error: "); + Serial.println(ret); + } + + ret = sps30_start_measurement(); + if (ret < 0) { + Serial.print("PM starting measurement error\n"); + } + } + + bool dataReady() { + uint16_t data_ready; + int16_t ret; + + ret = sps30_read_data_ready(&data_ready); + if (ret < 0) { + Serial.print("PM reading data-ready flag error: "); + Serial.println(ret); + return false; + } else if (!data_ready) { + return false; + } + + return true; + } + + void read(SensorData *data) { + char serial[SPS30_MAX_SERIAL_LEN]; + int16_t ret; + + ret = sps30_read_measurement(&(data->pm)); + + if (ret <0) { + Serial.print("PM reading measurement error: "); + Serial.println(ret); + } + } +}; |