diff --git a/wled00/FX.h b/wled00/FX.h
index 1f0df9da3..5c80686d6 100644
--- a/wled00/FX.h
+++ b/wled00/FX.h
@@ -52,7 +52,7 @@
#else
#define MIN_SHOW_DELAY (_frametime < 16 ? 8 : 15) // legacy MIN_SHOW_DELAY - creates more idle loops, but reduces framerates
#endif
-#define FPS_UNLIMITED 120
+#define FPS_UNLIMITED 0
/* each segment uses 82 bytes of SRAM memory, so if you're application fails because of
insufficient memory, decreasing MAX_NUM_SEGMENTS may help */
diff --git a/wled00/FX_fcn.cpp b/wled00/FX_fcn.cpp
index 3972dad2c..30882c4e7 100644
--- a/wled00/FX_fcn.cpp
+++ b/wled00/FX_fcn.cpp
@@ -1314,7 +1314,7 @@ void WS2812FX::service() {
#if defined(ARDUINO_ARCH_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32C3)
if (elapsed < 2) return; // keep wifi alive
- if ( !_triggered && (_targetFps != FPS_UNLIMITED) && (_targetFps > 0)) {
+ if ( !_triggered && (_targetFps != FPS_UNLIMITED)) {
if (elapsed < MIN_SHOW_DELAY) return; // WLEDMM too early for service
}
#else // legacy
@@ -1450,9 +1450,9 @@ uint16_t WS2812FX::getFps() const {
}
void WS2812FX::setTargetFps(uint8_t fps) {
- if (fps > 0 && fps <= 120) _targetFps = fps;
- _frametime = 1000 / _targetFps;
- if (fps == FPS_UNLIMITED) _frametime = 3; // unlimited mode
+ if (fps <= 120) _targetFps = fps;
+ if (_targetFps > 0) _frametime = 1000 / _targetFps;
+ else _frametime = 3; // unlimited mode
}
void WS2812FX::setMode(uint8_t segid, uint8_t m) {
diff --git a/wled00/data/settings_leds.htm b/wled00/data/settings_leds.htm
index 6be5becd1..35bbbd312 100644
--- a/wled00/data/settings_leds.htm
+++ b/wled00/data/settings_leds.htm
@@ -380,6 +380,10 @@
gId('psu').innerHTML = s;
gId('psu2').innerHTML = s2;
gId("json").style.display = d.Sf.IT.value==8 ? "" : "none";
+
+ // show/hide unlimited FPS message
+ gId('fpsNone').style.display = (d.Sf.FR.value == 0) ? 'block':'none';
+ gId('fpsHelp').style.display = (d.Sf.FR.value == 0)? 'none':'block';
}
function lastEnd(i) {
if (i-- < 1) return 0;
@@ -870,7 +874,9 @@ Swap:
- Target refresh rate: FPS
+ Target refresh rate: FPS
+