diff --git a/wled00/wled.cpp b/wled00/wled.cpp index fb8823650..91f2943a4 100644 --- a/wled00/wled.cpp +++ b/wled00/wled.cpp @@ -103,6 +103,7 @@ void WLED::loop() } yield(); handleWs(); + handleStatusLED(); // DEBUG serial logging #ifdef WLED_DEBUG @@ -174,6 +175,10 @@ void WLED::setup() SPIFFS.begin(); #endif +#if STATUSLED && STATUSLED != LEDPIN + pinMode(STATUSLED, OUTPUT); +#endif + DEBUG_PRINTLN(F("Load EEPROM")); loadSettingsFromEEPROM(true); beginStrip(); @@ -504,3 +509,26 @@ void WLED::handleConnection() } } } + +void WLED::handleStatusLED() +{ + #if STATUSLED && STATUSLED != LEDPIN + ledStatusType = WLED_CONNECTED ? 0 : 2; + if (mqttEnabled && ledStatusType != 2) // Wi-Fi takes presendence over MQTT + ledStatusType = WLED_MQTT_CONNECTED ? 0 : 4; + if (ledStatusType) { + if (millis() - ledStatusLastMillis >= (1000/ledStatusType)) { + ledStatusLastMillis = millis(); + ledStatusState = ledStatusState ? 0 : 1; + digitalWrite(STATUSLED, ledStatusState); + } + } else { + #ifdef STATUSLEDINVERTED + digitalWrite(STATUSLED, HIGH); + #else + digitalWrite(STATUSLED, LOW); + #endif + + } + #endif +} \ No newline at end of file diff --git a/wled00/wled.h b/wled00/wled.h index c587c88e7..c6f80731f 100644 --- a/wled00/wled.h +++ b/wled00/wled.h @@ -506,6 +506,13 @@ WLED_GLOBAL WS2812FX strip _INIT(WS2812FX()); // Usermod manager WLED_GLOBAL UsermodManager usermods _INIT(UsermodManager()); +// Status LED +#if STATUSLED && STATUSLED != LEDPIN + WLED_GLOBAL unsigned long ledStatusLastMillis _INIT(0); + WLED_GLOBAL unsigned short ledStatusType _INIT(0); // current status type - corresponds to number of blinks per second + WLED_GLOBAL bool ledStatusState _INIT(0); // the current LED state +#endif + // debug macro variable definitions #ifdef WLED_DEBUG WLED_GLOBAL unsigned long debugTime _INIT(0); @@ -544,5 +551,6 @@ public: void initAP(bool resetAP = false); void initConnection(); void initInterfaces(); + void handleStatusLED(); }; #endif // WLED_H