diff --git a/wled00/FX.cpp b/wled00/FX.cpp index 90c214168..8e18bc5bd 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -2324,3 +2324,34 @@ uint16_t WS2812FX::mode_halloween_eyes() return FRAMETIME; } + + +//Speed slider sets amount of LEDs lit, intensity sets unlit +uint16_t WS2812FX::mode_static_pattern() +{ + uint16_t lit = 1 + SEGMENT.speed; + uint16_t unlit = 1 + SEGMENT.intensity; + bool drawingLit = true; + uint16_t cnt = 0; + + for (uint16_t i = SEGMENT.start; i < SEGMENT.stop; i++) { + setPixelColor(i, (drawingLit) ? color_from_palette(i, true, PALETTE_SOLID_WRAP, 0) : SEGCOLOR(1)); + cnt++; + if (cnt >= ((drawingLit) ? lit : unlit)) { + cnt = 0; + drawingLit = !drawingLit; + } + } + + return FRAMETIME; +} + + +//Speed slider sets number of "lights", intensity sets LEDs per light +/*uint16_t WS2812FX::mode_static_pattern2() +{ + uint16_t maxlights = SEGLEN >> 1; + uint16_t zones = 1 + (SEGMENT.speed); + + return FRAMETIME; +}*/ diff --git a/wled00/FX.h b/wled00/FX.h index f691ec850..9bb24d5d6 100644 --- a/wled00/FX.h +++ b/wled00/FX.h @@ -84,7 +84,7 @@ #define IS_REVERSE ((SEGMENT.options & REVERSE ) == REVERSE ) #define IS_SELECTED ((SEGMENT.options & SELECTED) == SELECTED ) -#define MODE_COUNT 83 +#define MODE_COUNT 84 #define FX_MODE_STATIC 0 #define FX_MODE_BLINK 1 @@ -170,6 +170,7 @@ #define FX_MODE_TWINKLEFOX 80 #define FX_MODE_TWINKLECAT 81 #define FX_MODE_HALLOWEEN_EYES 82 +#define FX_MODE_STATIC_PATTERN 83 class WS2812FX { @@ -308,6 +309,8 @@ class WS2812FX { _mode[FX_MODE_TWINKLEFOX] = &WS2812FX::mode_twinklefox; _mode[FX_MODE_TWINKLECAT] = &WS2812FX::mode_twinklecat; _mode[FX_MODE_HALLOWEEN_EYES] = &WS2812FX::mode_halloween_eyes; + _mode[FX_MODE_STATIC_PATTERN] = &WS2812FX::mode_static_pattern; + _brightness = DEFAULT_BRIGHTNESS; currentPalette = CRGBPalette16(CRGB::Black); @@ -482,7 +485,8 @@ class WS2812FX { mode_ripple(void), mode_twinklefox(void), mode_twinklecat(void), - mode_halloween_eyes(void); + mode_halloween_eyes(void), + mode_static_pattern(void); private: NeoPixelWrapper *bus; @@ -553,7 +557,7 @@ const char JSON_mode_names[] PROGMEM = R"=====([ "Out Out","Out In","Circus","Halloween","Tri Chase","Tri Wipe","Tri Fade","Lightning","ICU","Multi Comet", "Dual Scanner","Stream 2","Oscillate","Pride 2015","Juggle","Palette","Fire 2012","Colorwaves","BPM","Fill Noise", "Noise 1","Noise 2","Noise 3","Noise 4","Colortwinkles","Lake","Meteor","Smooth Meteor","Railway","Ripple", -"Twinklefox","Twinklecat","Halloween Eyes" +"Twinklefox","Twinklecat","Halloween Eyes","Solid Pattern" ])====="; diff --git a/wled00/data/settings_leds.htm b/wled00/data/settings_leds.htm index cbeab632d..6c4203bcb 100644 Binary files a/wled00/data/settings_leds.htm and b/wled00/data/settings_leds.htm differ diff --git a/wled00/wled00.ino b/wled00/wled00.ino index e3dcf9d96..1a3c9a416 100644 --- a/wled00/wled00.ino +++ b/wled00/wled00.ino @@ -100,7 +100,7 @@ //version code in format yymmddb (b = daily build) -#define VERSION 1911122 +#define VERSION 1911161 char versionString[] = "0.8.7-dev"; diff --git a/wled00/wled17_mqtt.ino b/wled00/wled17_mqtt.ino index 4bc8c0c93..cec37eed6 100644 --- a/wled00/wled17_mqtt.ino +++ b/wled00/wled17_mqtt.ino @@ -83,7 +83,7 @@ void publishMqtt() strcat(subuf, "/g"); mqtt->publish(subuf, 0, true, s); - sprintf(s, "#%06X", col[3]*16777216 + col[0]*65536 + col[1]*256 + col[2]); + sprintf(s, "#%06X", (col[3] << 24) | (col[0] << 16) | (col[1] << 8) | (col[2])); strcpy(subuf, mqttDeviceTopic); strcat(subuf, "/c"); mqtt->publish(subuf, 0, true, s); diff --git a/wled00/wled19_json.ino b/wled00/wled19_json.ino index 20cdcfc40..01525980b 100644 --- a/wled00/wled19_json.ino +++ b/wled00/wled19_json.ino @@ -248,6 +248,10 @@ void serveJson(AsyncWebServerRequest* request) const String& url = request->url(); if (url.indexOf("state") > 0) subJson = 1; else if (url.indexOf("info") > 0) subJson = 2; + else if (url.indexOf("live") > 0) { + serveLiveLeds(request); + return; + } else if (url.indexOf("eff") > 0) { request->send_P(200, "application/json", JSON_mode_names); return; @@ -282,3 +286,23 @@ void serveJson(AsyncWebServerRequest* request) response->setLength(); request->send(response); } + +#define MAX_LIVE_LEDS 180 + +void serveLiveLeds(AsyncWebServerRequest* request) +{ + byte n = (ledCount -1) /MAX_LIVE_LEDS +1; //only serve every n'th LED if count over MAX_LIVE_LEDS + char buffer[2000] = "{\"leds\":["; + olen = 9; + obuf = buffer; + + for (uint16_t i= 0; i < ledCount; i += n) + { + olen += sprintf(buffer + olen, "\"%06X\",", strip.getPixelColor(i)); + } + olen -= 1; + oappend("],\"n\":"); + oappendi(n); + oappend("}"); + request->send(200, "application/json", buffer); +}