diff --git a/examples/ONE/ONE.ino b/examples/ONE/ONE.ino index eff2c19..8768adc 100644 --- a/examples/ONE/ONE.ino +++ b/examples/ONE/ONE.ino @@ -744,7 +744,7 @@ void setup() { /** Show boot display */ Serial.println("Firmware Version: " + ag.getVersion()); displayShowText("AirGradient ONE", "FW Version: ", ag.getVersion()); - + boardInit(); delay(DISPLAY_DELAY_SHOW_CONTENT_MS); @@ -2288,6 +2288,11 @@ static void tempHumUpdate(void) { Serial.printf("Temperature in C: %0.2f\r\n", temp); Serial.printf("Relative Humidity: %d\r\n", hum); + + // Update compensation temperature and humidity for SGP41 + if (hasSensorSGP) { + ag.sgp41.setCompensationTemperatureHumidity(temp, hum); + } } else { Serial.println("SHT read failed"); } diff --git a/examples/Open_Air/Open_Air.ino b/examples/Open_Air/Open_Air.ino index 49cb36d..e63bac8 100644 --- a/examples/Open_Air/Open_Air.ino +++ b/examples/Open_Air/Open_Air.ino @@ -1204,6 +1204,25 @@ static void pmUpdate(void) { pm2hum = 0; } } + + if (hasSensorSGP) { + float temp; + float hum; + if (pmsResult_1 && pmsResult_2) { + temp = (temp_1 + temp_2) / 2.0f; + hum = (hum_1 + hum_2) / 2.0f; + } else { + if (pmsResult_1) { + temp = temp_1; + hum = hum_1; + } + if (pmsResult_2) { + temp = temp_2; + hum = hum_2; + } + } + ag.sgp41.setCompensationTemperatureHumidity(temp, hum); + } } static void co2Update(void) { diff --git a/src/Sgp41/Sgp41.cpp b/src/Sgp41/Sgp41.cpp index f477c94..471a986 100644 --- a/src/Sgp41/Sgp41.cpp +++ b/src/Sgp41/Sgp41.cpp @@ -253,7 +253,20 @@ int Sgp41::getTvocRaw(void) { return tvocRaw; } /** * @brief Get NOX raw value - * - * @return int + * + * @return int */ int Sgp41::getNoxRaw(void) { return noxRaw; } + +/** + * @brief Set compasation temperature and humidity to calculate TVOC and NOx + * index + * + * @param temp Temperature + * @param hum Humidity + */ +void Sgp41::setCompensationTemperatureHumidity(float temp, float hum) { + defaultT = static_cast((temp + 45) * 65535 / 175); + defaultRh = static_cast(hum * 65535 / 100); + AgLog("Update: defaultT: %d, defaultRh: %d", defaultT, defaultRh); +} diff --git a/src/Sgp41/Sgp41.h b/src/Sgp41/Sgp41.h index db0065e..3bbeda8 100644 --- a/src/Sgp41/Sgp41.h +++ b/src/Sgp41/Sgp41.h @@ -25,6 +25,7 @@ public: int getNoxIndex(void); int getTvocRaw(void); int getNoxRaw(void); + void setCompensationTemperatureHumidity(float temp, float hum); private: bool onConditioning = true;