From baf49b88f475f1cac735185b43bac9bfa459849f Mon Sep 17 00:00:00 2001 From: cschwinne Date: Mon, 20 Sep 2021 21:22:04 +0200 Subject: [PATCH] Semi-working segment on/off transition --- CHANGELOG.md | 6 ++++++ wled00/FX.h | 11 ++++++----- wled00/json.cpp | 4 +++- wled00/wled.h | 2 +- 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 19bf7186d..c53b653f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ ### Builds after release 0.12.0 +#### Build 2109200 + +- Added segment names (PR #2184) +- Improved Police and other effects (PR #2184) +- Reverted PR #1902 (Live color correction - will be implemented as usermod) (PR #2175) + #### Build 2109100 - Added an auto create segments per bus setting diff --git a/wled00/FX.h b/wled00/FX.h index 836321504..da2ab8629 100644 --- a/wled00/FX.h +++ b/wled00/FX.h @@ -274,8 +274,8 @@ class WS2812FX { }*/ void setOption(uint8_t n, bool val, uint8_t segn = 255) { - //bool prevOn = false; - //if (n == SEG_OPTION_ON) prevOn = getOption(SEG_OPTION_ON); + bool prevOn = false; + if (n == SEG_OPTION_ON) prevOn = getOption(SEG_OPTION_ON); if (val) { options |= 0x01 << n; } else @@ -283,13 +283,13 @@ class WS2812FX { options &= ~(0x01 << n); } //transitions on segment on/off don't work correctly at this point - /*if (n == SEG_OPTION_ON && segn < MAX_NUM_SEGMENTS && getOption(SEG_OPTION_ON) != prevOn) { - if (getOption(SEG_OPTION_ON)) { + if (n == SEG_OPTION_ON && segn < MAX_NUM_SEGMENTS && val != prevOn) { + if (val) { ColorTransition::startTransition(0, colors[0], instance->_transitionDur, segn, 0); } else { ColorTransition::startTransition(opacity, colors[0], instance->_transitionDur, segn, 0); } - }*/ + } } bool getOption(uint8_t n) { @@ -473,6 +473,7 @@ class WS2812FX { uint8_t segn = segment & 0x3F; if (segn >= MAX_NUM_SEGMENTS) return 0; uint8_t briNew = instance->_segments[segn].opacity; + if (!instance->_segments[segn].getOption(SEG_OPTION_ON)) briNew = 0; //NEW uint32_t prog = progress() + 1; return ((briNew * prog) + (briOld * (0x10000 - prog))) >> 16; } diff --git a/wled00/json.cpp b/wled00/json.cpp index 087e06224..ad88d828a 100644 --- a/wled00/json.cpp +++ b/wled00/json.cpp @@ -70,7 +70,9 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId) seg.setOption(SEG_OPTION_ON, 1, id); } - seg.setOption(SEG_OPTION_ON, elem["on"] | seg.getOption(SEG_OPTION_ON), id); + bool on = elem["on"] | seg.getOption(SEG_OPTION_ON); + if (elem["on"].is() && elem["on"].as()[0] == 't') on = !on; + seg.setOption(SEG_OPTION_ON, on, id); JsonArray colarr = elem["col"]; if (!colarr.isNull()) diff --git a/wled00/wled.h b/wled00/wled.h index 00920b960..32c8e0194 100644 --- a/wled00/wled.h +++ b/wled00/wled.h @@ -8,7 +8,7 @@ */ // version code in format yymmddb (b = daily build) -#define VERSION 2109100 +#define VERSION 2109200 //uncomment this if you have a "my_config.h" file you'd like to use //#define WLED_USE_MY_CONFIG