Files
AQS-FW/CO2_sensor.cpp

64 lines
1.7 KiB
C++

#include "CO2_sensor.h"
//Adafruit_SCD30 scd30;
SCD30 scd30;
#define CO2_INTERVAL 120000 //ms
#define SCD30TEMPMAX 50
#define SDC30HUMMAX 100
#define SCD30CO2MAX 20000
#define SCD30MIN 0
uint8_t CO2_samples = 3600 / 30;
AQSSensor SCD30_temperature("Temperature", SCD30_temp, "degC", device_name, CO2_samples, SCD30MIN, SCD30TEMPMAX);
AQSSensor SCD30_Humidity("Humidity", SCD30_hum, "%RH", device_name, CO2_samples, SCD30MIN, SDC30HUMMAX);
AQSSensor SCD30_CO2("CO2", SCD30_co2, "PPM", device_name, CO2_samples, SCD30MIN, SCD30CO2MAX);
uint32_t CO2_lastUpdate = 0;
void initCO2sensor(void)
{
Serial.println("SCD30: init");
Wire.begin();
if (!scd30.begin())
{
Serial.println("SCD30: Failed to find sensor");
}
else
{
//configure sensor
scd30.setMeasurementInterval(g_pms_report_period);
addSensorToList(&SCD30_temperature);
addSensorToList(&SCD30_Humidity);
addSensorToList(&SCD30_CO2);
//check callibration Mode
//scd30.selfCalibrationEnabled(false);
//scd30.read();
Serial.println("SCD30: init OK");
}
}
void handleCO2sensor(void)
{
uint32_t currentmillis = millis();
if ((currentmillis - CO2_lastUpdate > (g_pms_report_period * 1000)) || (!CO2_lastUpdate))
{
if (!scd30.dataAvailable())
{
return;
}
SCD30_temperature.set(uint32_t(scd30.getTemperature()));
SCD30_Humidity.set(uint32_t(scd30.getHumidity()));
SCD30_CO2.set(uint32_t(scd30.getCO2()));
SCD30_temperature.publish();
SCD30_Humidity.publish();
SCD30_CO2.publish();
CO2_lastUpdate = currentmillis;
}
}