From 9ae8fb235577e8f1bedf241917699227525ded33 Mon Sep 17 00:00:00 2001 From: Phat Nguyen Date: Sun, 10 Mar 2024 09:34:04 +0700 Subject: [PATCH] fix: Completely turn off LEDbar --- examples/ONE/ONE.ino | 18 +++++++++++++++--- src/Main/LedBar.cpp | 20 ++++++++++++++++++-- src/Main/LedBar.h | 3 +++ 3 files changed, 36 insertions(+), 5 deletions(-) diff --git a/examples/ONE/ONE.ino b/examples/ONE/ONE.ino index fce9869..0de5a4c 100644 --- a/examples/ONE/ONE.ino +++ b/examples/ONE/ONE.ino @@ -485,6 +485,7 @@ private: if (EEPROM.readBytes(0, &config, sizeof(config)) != sizeof(config)) { config.inF = false; config.inUSAQI = false; + config.useRGBLedBar = UseLedBarCO2; // default use LED bar for CO2 memset(config.models, 0, sizeof(config.models)); memset(config.mqttBrokers, 0, sizeof(config.mqttBrokers)); @@ -743,13 +744,17 @@ 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); /** Init sensor */ - boardInit(); /** Init AirGradient server */ agServer.begin(); + if (agServer.getLedBarMode() == UseLedBarOff) { + ag.ledBar.setEnable(false); + } /** Run LED test on start up */ displayShowText("Press now for", "LED test &", "offline mode"); @@ -799,6 +804,8 @@ void setup() { dispSmHandler(APP_SM_WIFI_OK_SERVER_OK_SENSOR_CONFIG_FAILED); ledSmHandler(APP_SM_WIFI_OK_SERVER_OK_SENSOR_CONFIG_FAILED); delay(DISPLAY_DELAY_SHOW_CONTENT_MS); + } else { + ag.ledBar.setEnable(agServer.getLedBarMode() != UseLedBarOff); } } @@ -1767,6 +1774,9 @@ static void updateServerConfiguration(void) { } } + // Update LED bar + ag.ledBar.setEnable(agServer.getLedBarMode() != UseLedBarOff); + if (agServer.getCo2AbcDaysConfig() > 0) { if (hasSensorS8) { int newHour = agServer.getCo2AbcDaysConfig() * 24; @@ -2143,9 +2153,11 @@ static void sensorLedColorHandler(void) { case UseLedBarPM: setRGBledPMcolor(pm25); break; + case UseLedBarOff: + ag.ledBar.clear(); + break; default: - ag.ledBar.setColor(0, 0, 0, ag.ledBar.getNumberOfLeds() - 1); - ag.ledBar.setColor(0, 0, 0, ag.ledBar.getNumberOfLeds() - 2); + ag.ledBar.clear(); break; } } diff --git a/src/Main/LedBar.cpp b/src/Main/LedBar.cpp index 63b589d..2627d55 100644 --- a/src/Main/LedBar.cpp +++ b/src/Main/LedBar.cpp @@ -112,9 +112,13 @@ void LedBar::setColor(uint8_t red, uint8_t green, uint8_t blue) { /** * @brief Call to turn LED on/off base on the setting color - * + * */ void LedBar::show(void) { + // Ignore update the LED if LED bar disabled + if (enabled == false) { + return; + } if (pixel()->canShow()) { pixel()->show(); } @@ -122,6 +126,18 @@ void LedBar::show(void) { /** * @brief Set all LED to off color (r,g,b) = (0,0,0) - * + * */ void LedBar::clear(void) { pixel()->clear(); } + +void LedBar::setEnable(bool enable) { + if (this->enabled != enable) { + if (enable == false) { + pixel()->clear(); + pixel()->show(); + } + } + this->enabled = enable; +} + +bool LedBar::isEnabled(void) { return enabled; } diff --git a/src/Main/LedBar.h b/src/Main/LedBar.h index b2431e3..777ed24 100644 --- a/src/Main/LedBar.h +++ b/src/Main/LedBar.h @@ -23,8 +23,11 @@ public: int getNumberOfLeds(void); void show(void); void clear(void); + void setEnable(bool enable); + bool isEnabled(void); private: + bool enabled = true; const BoardDef *_bsp; bool _isBegin = false; uint8_t _ledState = 0;