#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; } }