From a30535f75f6bfab8924d6f34dab9022126891802 Mon Sep 17 00:00:00 2001 From: samuelbles07 Date: Sun, 10 Nov 2024 04:13:58 +0700 Subject: [PATCH] Use avg value for display and led bar --- src/AgConfigure.cpp | 7 ++++++- src/AgOledDisplay.cpp | 25 ++++++++++++------------- src/AgStateMachine.cpp | 7 ++++--- src/AgValue.h | 2 ++ 4 files changed, 24 insertions(+), 17 deletions(-) diff --git a/src/AgConfigure.cpp b/src/AgConfigure.cpp index 57108cb..f090d3d 100644 --- a/src/AgConfigure.cpp +++ b/src/AgConfigure.cpp @@ -1369,7 +1369,12 @@ bool Configuration::isPMCorrectionChanged(void) { */ bool Configuration::isPMCorrectionEnabled(void) { PMCorrection pmCorrection = getPMCorrection(); - return pmCorrection.algorithm != PMCorrectionAlgorithm::None; + if (pmCorrection.algorithm == PMCorrectionAlgorithm::None || + pmCorrection.algorithm == PMCorrectionAlgorithm::Unknown) { + return false; + } + + return true; } Configuration::PMCorrection Configuration::getPMCorrection(void) { diff --git a/src/AgOledDisplay.cpp b/src/AgOledDisplay.cpp index 1dfbbba..d28ba40 100644 --- a/src/AgOledDisplay.cpp +++ b/src/AgOledDisplay.cpp @@ -12,7 +12,7 @@ */ void OledDisplay::showTempHum(bool hasStatus, char *buf, int buf_size) { /** Temperature */ - float temp = value.getFloat(Measurements::Temperature); + float temp = value.getAverage(Measurements::Temperature); if (utils::isValidTemperature(temp)) { float t = 0.0f; if (config.isTemperatureUnitInF()) { @@ -44,7 +44,7 @@ void OledDisplay::showTempHum(bool hasStatus, char *buf, int buf_size) { DISP()->drawUTF8(1, 10, buf); /** Show humidity */ - int rhum = (int)value.getFloat(Measurements::Humidity); + int rhum = round(value.getAverage(Measurements::Humidity)); if (utils::isValidHumidity(rhum)) { snprintf(buf, buf_size, "%d%%", rhum); } else { @@ -292,7 +292,7 @@ void OledDisplay::showDashboard(const char *status) { DISP()->drawUTF8(1, 27, "CO2"); DISP()->setFont(u8g2_font_t0_22b_tf); - int co2 = value.get(Measurements::CO2); + int co2 = round(value.getAverage(Measurements::CO2)); if (utils::isValidCO2(co2)) { sprintf(strBuf, "%d", co2); } else { @@ -313,11 +313,10 @@ void OledDisplay::showDashboard(const char *status) { DISP()->drawStr(55, 27, "PM2.5"); /** Draw PM2.5 value */ - - int pm25 = value.get(Measurements::PM25); + int pm25 = round(value.getAverage(Measurements::PM25)); if (utils::isValidPm(pm25)) { if (config.hasSensorSHT && config.isPMCorrectionEnabled()) { - pm25 = (int)value.getCorrectedPM25(*ag, config); + pm25 = round(value.getCorrectedPM25(*ag, config, true)); } if (config.isPmStandardInUSAQI()) { sprintf(strBuf, "%d", ag->pms5003.convertPm25ToUsAqi(pm25)); @@ -343,7 +342,7 @@ void OledDisplay::showDashboard(const char *status) { DISP()->drawStr(100, 27, "VOC:"); /** Draw tvocIndexvalue */ - int tvoc = value.get(Measurements::TVOC); + int tvoc = round(value.getAverage(Measurements::TVOC)); if (utils::isValidVOC(tvoc)) { sprintf(strBuf, "%d", tvoc); } else { @@ -352,7 +351,7 @@ void OledDisplay::showDashboard(const char *status) { DISP()->drawStr(100, 39, strBuf); /** Draw NOx label */ - int nox = value.get(Measurements::NOx); + int nox = round(value.getAverage(Measurements::NOx)); DISP()->drawStr(100, 53, "NOx:"); if (utils::isValidNOx(nox)) { sprintf(strBuf, "%d", nox); @@ -365,7 +364,7 @@ void OledDisplay::showDashboard(const char *status) { ag->display.clear(); /** Set CO2 */ - int co2 = value.get(Measurements::CO2); + int co2 = round(value.getAverage(Measurements::CO2)); if (utils::isValidCO2(co2)) { snprintf(strBuf, sizeof(strBuf), "CO2:%d", co2); } else { @@ -376,9 +375,9 @@ void OledDisplay::showDashboard(const char *status) { ag->display.setText(strBuf); /** Set PM */ - int pm25 = value.get(Measurements::PM25); + int pm25 = round(value.getAverage(Measurements::PM25)); if (config.hasSensorSHT && config.isPMCorrectionEnabled()) { - pm25 = (int)value.getCorrectedPM25(*ag, config); + pm25 = round(value.getCorrectedPM25(*ag, config, true)); } ag->display.setCursor(0, 12); @@ -390,7 +389,7 @@ void OledDisplay::showDashboard(const char *status) { ag->display.setText(strBuf); /** Set temperature and humidity */ - float temp = value.getFloat(Measurements::Temperature); + float temp = value.getAverage(Measurements::Temperature); if (utils::isValidTemperature(temp)) { if (config.isTemperatureUnitInF()) { snprintf(strBuf, sizeof(strBuf), "T:%0.1f F", utils::degreeC_To_F(temp)); @@ -408,7 +407,7 @@ void OledDisplay::showDashboard(const char *status) { ag->display.setCursor(0, 24); ag->display.setText(strBuf); - int rhum = (int)value.getFloat(Measurements::Humidity); + int rhum = round(value.getAverage(Measurements::Humidity)); if (utils::isValidHumidity(rhum)) { snprintf(strBuf, sizeof(strBuf), "H:%d %%", rhum); } else { diff --git a/src/AgStateMachine.cpp b/src/AgStateMachine.cpp index 978eab4..117be11 100644 --- a/src/AgStateMachine.cpp +++ b/src/AgStateMachine.cpp @@ -86,7 +86,7 @@ bool StateMachine::sensorhandleLeds(void) { */ int StateMachine::co2handleLeds(void) { int totalUsed = ag->ledBar.getNumberOfLeds(); - int co2Value = value.get(Measurements::CO2); + int co2Value = round(value.getAverage(Measurements::CO2)); if (co2Value <= 700) { /** G; 1 */ ag->ledBar.setColor(RGB_COLOR_G, ag->ledBar.getNumberOfLeds() - 1); @@ -171,9 +171,10 @@ int StateMachine::co2handleLeds(void) { */ int StateMachine::pm25handleLeds(void) { int totalUsed = ag->ledBar.getNumberOfLeds(); - int pm25Value = value.get(Measurements::PM25); + + int pm25Value = round(value.getFloat(Measurements::PM25)); if (config.hasSensorSHT && config.isPMCorrectionEnabled()) { - pm25Value = (int)value.getCorrectedPM25(*ag, config); + pm25Value = round(value.getCorrectedPM25(*ag, config, true)); } if (pm25Value <= 5) { diff --git a/src/AgValue.h b/src/AgValue.h index 8733001..f6ae46d 100644 --- a/src/AgValue.h +++ b/src/AgValue.h @@ -125,6 +125,8 @@ public: /** * @brief Get the Corrected PM25 object based on the correction algorithm from configuration + * + * If correction is not enabled, then will return the raw value (either average or last value) * * @param ag AirGradient instance * @param config Configuration instance