diff --git a/src/main.cpp b/src/main.cpp index bf80e52..99fe014 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -99,6 +99,7 @@ bool initLEDs() enum LEDState { STARTUP, UDP, + SHOWIP, ANIMATION, TRANSITION, TRANSITION_FADE2BLACK @@ -112,6 +113,8 @@ static void ledFSM(void) static unsigned long lastUDPUpdate = 0; + static unsigned long stateEnteredTime = 0; + LEDState lastState = ledState; switch(ledState) { @@ -124,7 +127,27 @@ static void ledFSM(void) Font::textToBitmap(infoStr.c_str(), &bmp, Fader::Color{0, 0, 0, 32}); animController.changeAnimation(std::unique_ptr(new ImageScrollerAnimation(&ledFader, &bmp, 5)), false); - //animController.changeAnimation(std::unique_ptr(new FireAnimation(&ledFader, false)), false); + ledState = SHOWIP; + } + break; + + case SHOWIP: + if(stateEntered) { + animController.restart(); + } + + animController.loop(); + + if(((WiFi.status() == WL_CONNECTED) || (WiFi.getMode() == WIFI_MODE_AP)) && + udpProto.check()) { + // UDP packet received -> transition to UDP state + nextState = UDP; + ledState = TRANSITION; + } + + // change to last used animation after some time + if((millis() - stateEnteredTime) > 60000) { + animController.changeAnimation(std::unique_ptr(new FireAnimation(&ledFader, false)), true); ledState = ANIMATION; } break; @@ -190,7 +213,12 @@ static void ledFSM(void) break; } - stateEntered = (lastState != ledState); + if(lastState != ledState) { + stateEntered = true; + stateEnteredTime = millis(); + } else { + stateEntered = false; + } } static void fineDelay(uint32_t us)