#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() {
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);
}
}
};