diff --git a/usermods/usermod_v2_auto_save/usermod_v2_auto_save.h b/usermods/usermod_v2_auto_save/usermod_v2_auto_save.h index a5f9da292..74894ac4f 100644 --- a/usermods/usermod_v2_auto_save/usermod_v2_auto_save.h +++ b/usermods/usermod_v2_auto_save/usermod_v2_auto_save.h @@ -38,7 +38,7 @@ class AutoSaveUsermod : public Usermod { bool applyAutoSaveOnBoot = false; // do we load auto-saved preset on boot? // If we've detected the need to auto save, this will be non zero. - uint16_t autoSaveAfter = 0; + unsigned long autoSaveAfter = 0; uint8_t knownBrightness = 0; uint8_t knownEffectSpeed = 0; @@ -104,7 +104,7 @@ class AutoSaveUsermod : public Usermod { * Da loop. */ void loop() { - if (!autoSaveAfterSec || !enabled || strip.isUpdating()) return; // setting 0 as autosave seconds disables autosave + if (!autoSaveAfterSec || !enabled || strip.isUpdating() || currentPreset>0) return; // setting 0 as autosave seconds disables autosave unsigned long now = millis(); uint8_t currentMode = strip.getMode(); diff --git a/usermods/usermod_v2_four_line_display/usermod_v2_four_line_display.h b/usermods/usermod_v2_four_line_display/usermod_v2_four_line_display.h index cf13769d0..03d91e5a9 100644 --- a/usermods/usermod_v2_four_line_display/usermod_v2_four_line_display.h +++ b/usermods/usermod_v2_four_line_display/usermod_v2_four_line_display.h @@ -346,7 +346,8 @@ class FourLineDisplayUsermod : public Usermod { (knownEffectIntensity != effectIntensity) || (knownMode != strip.getMode()) || (knownPalette != strip.getSegment(0).palette)) { - knownHour = 99; // force time update + knownHour = 99; // force time update + lastRedraw = now; // update lastRedraw marker } else if (sleepMode && !displayTurnedOff && ((now - lastRedraw)/1000)%5 == 0) { // change line every 5s showName = !showName; @@ -371,13 +372,13 @@ class FourLineDisplayUsermod : public Usermod { break; } knownHour = 99; // force time update + // do not update lastRedraw marker if just switching row contenet } else { // Nothing to change. // Turn off display after 3 minutes with no change. if(sleepMode && !displayTurnedOff && (millis() - lastRedraw > screenTimeout)) { // We will still check if there is a change in redraw() // and turn it back on if it changed. - clear(); // force screen clear sleepOrClock(true); } else if (displayTurnedOff && clockMode) { showTime(); @@ -385,9 +386,6 @@ class FourLineDisplayUsermod : public Usermod { return; } - // do not update lastRedraw marker if just switching row contenet - if (((now - lastRedraw)/1000)%5 != 0) lastRedraw = now; - // Turn the display back on if (displayTurnedOff) sleepOrClock(false); @@ -522,13 +520,23 @@ class FourLineDisplayUsermod : public Usermod { */ void overlay(const char* line1, const char *line2, long showHowLong) { if (displayTurnedOff) { - // Turn the display back on + // Turn the display back on (includes clear()) sleepOrClock(false); + } else { + clear(); } // Print the overlay - if (line1) drawString(0, 1*lineHeight, line1); - if (line2) drawString(0, 2*lineHeight, line2); + if (line1) { + String buf = line1; + center(buf, getCols()); + drawString(0, 1*lineHeight, buf.c_str()); + } + if (line2) { + String buf = line2; + center(buf, getCols()); + drawString(0, 2*lineHeight, buf.c_str()); + } overlayUntil = millis() + showHowLong; } @@ -555,12 +563,12 @@ class FourLineDisplayUsermod : public Usermod { * Enable sleep (turn the display off) or clock mode. */ void sleepOrClock(bool enabled) { + clear(); if (enabled) { if (clockMode) showTime(); else setPowerSave(1); displayTurnedOff = true; } else { - clear(); setPowerSave(0); displayTurnedOff = false; } diff --git a/wled00/wled.cpp b/wled00/wled.cpp index f24b78940..437e72bc7 100644 --- a/wled00/wled.cpp +++ b/wled00/wled.cpp @@ -204,6 +204,10 @@ void WiFiEvent(WiFiEvent_t event) void WLED::loop() { + #ifdef WLED_DEBUG + static unsigned long maxUsermodMillis = 0; + #endif + handleTime(); handleIR(); // 2nd call to function needed for ESP32 to return valid results -- should be good for ESP8266, too handleConnection(); @@ -214,7 +218,15 @@ void WLED::loop() handleDMX(); #endif userLoop(); + + #ifdef WLED_DEBUG + unsigned long usermodMillis = millis(); + #endif usermods.loop(); + #ifdef WLED_DEBUG + usermodMillis = millis() - usermodMillis; + if (usermodMillis > maxUsermodMillis) maxUsermodMillis = usermodMillis; + #endif yield(); handleIO(); @@ -312,7 +324,7 @@ void WLED::loop() // DEBUG serial logging #ifdef WLED_DEBUG - if (millis() - debugTime > 59999) { + if (millis() - debugTime > 29999) { DEBUG_PRINTLN(F("---DEBUG INFO---")); DEBUG_PRINT(F("Runtime: ")); DEBUG_PRINTLN(millis()); DEBUG_PRINT(F("Unix time: ")); toki.printTime(toki.getTime()); @@ -324,17 +336,19 @@ void WLED::loop() } else DEBUG_PRINTLN(F("No PSRAM")); #endif - DEBUG_PRINT(F("Wifi state: ")); DEBUG_PRINTLN(WiFi.status()); + DEBUG_PRINT(F("Wifi state: ")); DEBUG_PRINTLN(WiFi.status()); if (WiFi.status() != lastWifiState) { wifiStateChangedTime = millis(); } lastWifiState = WiFi.status(); - DEBUG_PRINT(F("State time: ")); DEBUG_PRINTLN(wifiStateChangedTime); - DEBUG_PRINT(F("NTP last sync: ")); DEBUG_PRINTLN(ntpLastSyncTime); - DEBUG_PRINT(F("Client IP: ")); DEBUG_PRINTLN(Network.localIP()); - DEBUG_PRINT(F("Loops/sec: ")); DEBUG_PRINTLN(loops / 10); + DEBUG_PRINT(F("State time: ")); DEBUG_PRINTLN(wifiStateChangedTime); + DEBUG_PRINT(F("NTP last sync: ")); DEBUG_PRINTLN(ntpLastSyncTime); + DEBUG_PRINT(F("Client IP: ")); DEBUG_PRINTLN(Network.localIP()); + DEBUG_PRINT(F("Loops/sec: ")); DEBUG_PRINTLN(loops / 60); + DEBUG_PRINT(F("Max UM time[ms]: ")); DEBUG_PRINTLN(maxUsermodMillis); loops = 0; + maxUsermodMillis = 0; debugTime = millis(); } loops++; diff --git a/wled00/wled.h b/wled00/wled.h index ffc518d79..8c5967770 100644 --- a/wled00/wled.h +++ b/wled00/wled.h @@ -8,7 +8,7 @@ */ // version code in format yymmddb (b = daily build) -#define VERSION 2109071 +#define VERSION 2109111 //uncomment this if you have a "my_config.h" file you'd like to use //#define WLED_USE_MY_CONFIG @@ -566,7 +566,7 @@ WLED_GLOBAL JsonDocument* fileDoc; WLED_GLOBAL bool doCloseFile _INIT(false); // presets -WLED_GLOBAL int16_t currentPreset _INIT(-1); +WLED_GLOBAL int8_t currentPreset _INIT(-1); WLED_GLOBAL byte errorFlag _INIT(0); @@ -628,7 +628,7 @@ WLED_GLOBAL UsermodManager usermods _INIT(UsermodManager()); WLED_GLOBAL unsigned long debugTime _INIT(0); WLED_GLOBAL int lastWifiState _INIT(3); WLED_GLOBAL unsigned long wifiStateChangedTime _INIT(0); - WLED_GLOBAL int loops _INIT(0); + WLED_GLOBAL unsigned long loops _INIT(0); #endif #ifdef ARDUINO_ARCH_ESP32