From 3443edf23337fb5d9ce63075ead80c4779cf823a Mon Sep 17 00:00:00 2001 From: dakkar Date: Sun, 27 Mar 2022 12:48:36 +0100 Subject: break code into logical components --- pm.h | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 pm.h (limited to 'pm.h') 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 + +#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); + } + } +}; -- cgit v1.2.3