add compensation temperature and humidity for SGP41

This commit is contained in:
Phat Nguyen
2024-03-10 11:20:52 +07:00
parent b94ae9eff0
commit 6837529096
4 changed files with 41 additions and 3 deletions

View File

@ -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");
}

View File

@ -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) {

View File

@ -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<uint16_t>((temp + 45) * 65535 / 175);
defaultRh = static_cast<uint16_t>(hum * 65535 / 100);
AgLog("Update: defaultT: %d, defaultRh: %d", defaultT, defaultRh);
}

View File

@ -25,6 +25,7 @@ public:
int getNoxIndex(void);
int getTvocRaw(void);
int getNoxRaw(void);
void setCompensationTemperatureHumidity(float temp, float hum);
private:
bool onConditioning = true;