aboutsummaryrefslogtreecommitdiff
path: root/pm.h
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 /pm.h
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 'pm.h')
-rw-r--r--pm.h63
1 files changed, 63 insertions, 0 deletions
diff --git a/pm.h b/pm.h
new file mode 100644
index 0000000..634c1b4
--- /dev/null
+++ b/pm.h
@@ -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);
+ }
+ }
+};