diff --git a/CHANGELOG.md b/CHANGELOG.md index c79a0805..3cad688b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,21 @@ ### Development versions after 0.10.0 release +#### Build 2006220 + +- Added Sunrise nightlight mode +- Added Chunchun effect +- Added `LO` (live override) command to HTTP API +- Added `mode` to `nl` object of JSON state API, deprecating `fade` +- Added light color scheme support to web UI (click sun next to brightness slider) +- Added option to hide labels in web UI (click flame icon next to intensity slider) +- Added hex color input (click palette icon next to palette select) (resolves #506) +- Added support for RGB sliders (need to set in localstorage) +- Added support for custom background color or image (need to set in localstorage) +- Added option to hide bottom tab bar in PC mode (need to set in localstorage) +- Fixed transition lag with multiple segments (fixes #985) +- Changed Nightlight wording (resolves #940) + #### Build 2006060 - Added five effects by Andrew Tuline (Phased, Phased Noise, Sine, Noise Pal and Twinkleup) diff --git a/package.json b/package.json index d0352cdc..a932fcd2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wled", - "version": "0.10.0", + "version": "0.10.1", "description": "Tools for WLED project", "main": "tools/cdata.js", "directories": { diff --git a/platformio.ini b/platformio.ini index a829e1c7..3a5383be 100644 --- a/platformio.ini +++ b/platformio.ini @@ -15,7 +15,7 @@ extra_configs = # Please uncomment one of the lines below to select your board(s) # ------------------------------------------------------------------------------ -# Travis CI binaries (comment this out when building for single board) +# Travis CI binaries default_envs = travis_esp8266, esp01, esp01_1m_ota, travis_esp32 # Release binaries diff --git a/readme.md b/readme.md index e239ddfb..dd4d2865 100644 --- a/readme.md +++ b/readme.md @@ -7,7 +7,7 @@
-# 👋 Welcome to my project WLED! +# Welcome to my project WLED! ✨ A fast and feature-rich implementation of an ESP8266/ESP32 webserver to control NeoPixel (WS2812B, WS2811, SK6812, APA102) LEDs or also SPI based chipsets like the WS2801! diff --git a/usermods/Temperature/readme.md b/usermods/Temperature/readme.md index d2587f7e..ef244447 100644 --- a/usermods/Temperature/readme.md +++ b/usermods/Temperature/readme.md @@ -1,6 +1,6 @@ # Temperature usermod -Based on the excellent `QuinLED_Dig_Uno_Temp_MQTT` by srg74! +Based on the excellent `QuinLED_Dig_Uno_Temp_MQTT` by srg74 and 400killer! This usermod will read from an attached DS18B20 temperature sensor (as available on the QuinLED Dig-Uno) The temperature is displayed both in the Info section of the web UI as well as published to the `/temperature` MQTT topic if enabled. This usermod will be expanded with support for different sensor types in the future. diff --git a/wled00/FX.cpp b/wled00/FX.cpp index 878fd938..35ea3f80 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -3342,8 +3342,8 @@ uint16_t WS2812FX::mode_solid_glitter() */ uint16_t WS2812FX::mode_sunrise() { //speed 0 - static sun - //speed 1 - 120: sunrise time in minutes - //speed 121 - 240 : sunset time in minutes - 120; + //speed 1 - 60: sunrise time in minutes + //speed 60 - 120 : sunset time in minutes - 60; //speed above: "breathing" rise and set if (SEGENV.call == 0 || SEGMENT.speed != SEGENV.aux0) { SEGENV.step = millis(); //save starting time, millis() because now can change from sync @@ -3540,3 +3540,26 @@ uint16_t WS2812FX::mode_flow(void) return FRAMETIME; } + + +/* + * Dots waving around in a sine/pendulum motion. + * Little pixel birds flying in a circle. By Aircoookie + */ +uint16_t WS2812FX::mode_chunchun(void) +{ + fill(SEGCOLOR(1)); + uint16_t counter = now*(6 + (SEGMENT.speed >> 4)); + uint16_t numBirds = SEGLEN >> 2; + uint16_t span = SEGMENT.intensity << 8; + + for (uint16_t i = 0; i < numBirds; i++) + { + counter -= span/numBirds; + int megumin = sin16(counter) + 0x8000; + uint32_t bird = (megumin * SEGLEN) >> 16; + uint32_t c = color_from_palette((i * 255)/ numBirds, false, true, 0); + setPixelColor(bird, c); + } + return FRAMETIME; +} \ No newline at end of file diff --git a/wled00/FX.h b/wled00/FX.h index f807de62..7afca48a 100644 --- a/wled00/FX.h +++ b/wled00/FX.h @@ -98,7 +98,7 @@ #define IS_REVERSE ((SEGMENT.options & REVERSE ) == REVERSE ) #define IS_SELECTED ((SEGMENT.options & SELECTED ) == SELECTED ) -#define MODE_COUNT 111 +#define MODE_COUNT 112 #define FX_MODE_STATIC 0 #define FX_MODE_BLINK 1 @@ -211,6 +211,7 @@ #define FX_MODE_SINEWAVE 108 #define FX_MODE_PHASEDNOISE 109 #define FX_MODE_FLOW 110 +#define FX_MODE_CHUNCHUN 111 class WS2812FX { typedef uint16_t (WS2812FX::*mode_ptr)(void); @@ -410,6 +411,7 @@ class WS2812FX { _mode[FX_MODE_SINEWAVE] = &WS2812FX::mode_sinewave; _mode[FX_MODE_PHASEDNOISE] = &WS2812FX::mode_phased_noise; _mode[FX_MODE_FLOW] = &WS2812FX::mode_flow; + _mode[FX_MODE_CHUNCHUN] = &WS2812FX::mode_chunchun; _brightness = DEFAULT_BRIGHTNESS; currentPalette = CRGBPalette16(CRGB::Black); @@ -604,7 +606,8 @@ class WS2812FX { mode_noisepal(void), mode_sinewave(void), mode_phased_noise(void), - mode_flow(void); + mode_flow(void), + mode_chunchun(void); private: NeoPixelWrapper *bus; @@ -691,7 +694,8 @@ const char JSON_mode_names[] PROGMEM = R"=====([ "Noise 1","Noise 2","Noise 3","Noise 4","Colortwinkles","Lake","Meteor","Meteor Smooth","Railway","Ripple", "Twinklefox","Twinklecat","Halloween Eyes","Solid Pattern","Solid Pattern Tri","Spots","Spots Fade","Glitter","Candle","Fireworks Starburst", "Fireworks 1D","Bouncing Balls","Sinelon","Sinelon Dual","Sinelon Rainbow","Popcorn","Drip","Plasma","Percent","Ripple Rainbow", -"Heartbeat","Pacifica","Candle Multi", "Solid Glitter","Sunrise","Phased","Twinkleup","Noise Pal", "Sine","Phased Noise","Flow" +"Heartbeat","Pacifica","Candle Multi", "Solid Glitter","Sunrise","Phased","Twinkleup","Noise Pal", "Sine","Phased Noise", +"Flow","Chunchun" ])====="; diff --git a/wled00/FX_fcn.cpp b/wled00/FX_fcn.cpp index ea24d066..399df185 100644 --- a/wled00/FX_fcn.cpp +++ b/wled00/FX_fcn.cpp @@ -136,6 +136,7 @@ void WS2812FX::setPixelColor(uint16_t i, byte r, byte g, byte b, byte w) } } + //reorder channels to selected order RgbwColor col; switch (colorOrder) { @@ -401,7 +402,12 @@ uint8_t WS2812FX::getMaxSegments(void) { uint8_t WS2812FX::getMainSegmentId(void) { if (mainSegment >= MAX_NUM_SEGMENTS) return 0; - return mainSegment; + if (_segments[mainSegment].isActive()) return mainSegment; + for (uint8_t i = 0; i < MAX_NUM_SEGMENTS; i++) //get first active + { + if (_segments[i].isActive()) return i; + } + return 0; } uint32_t WS2812FX::getColor(void) { @@ -529,11 +535,14 @@ void WS2812FX::setShowCallback(show_callback cb) void WS2812FX::setTransitionMode(bool t) { - _segment_index = getMainSegmentId(); - SEGMENT.setOption(SEG_OPTION_TRANSITIONAL, t); - if (!t) return; unsigned long waitMax = millis() + 20; //refresh after 20 ms if transition enabled - if (SEGMENT.mode == FX_MODE_STATIC && SEGENV.next_time > waitMax) SEGENV.next_time = waitMax; + for (uint16_t i = 0; i < MAX_NUM_SEGMENTS; i++) + { + _segment_index = i; + SEGMENT.setOption(SEG_OPTION_TRANSITIONAL, t); + + if (t && SEGMENT.mode == FX_MODE_STATIC && SEGENV.next_time > waitMax) SEGENV.next_time = waitMax; + } } /* diff --git a/wled00/const.h b/wled00/const.h index ba905f0d..c7437dde 100644 --- a/wled00/const.h +++ b/wled00/const.h @@ -100,6 +100,12 @@ #define SEG_OPTION_NONUNITY 4 //Indicates that the effect does not use FRAMETIME or needs getPixelColor #define SEG_OPTION_TRANSITIONAL 7 +//Timer mode types +#define NL_MODE_SET 0 //After nightlight time elapsed, set to target brightness +#define NL_MODE_FADE 1 //Fade to target brightness gradually +#define NL_MODE_COLORFADE 2 //Fade to target brightness and secondary color gradually +#define NL_MODE_SUN 3 //Sunrise/sunset. Target brightness is set immediately, then Sunrise effect is started. Max 60 min. + //EEPROM size #define EEPSIZE 2560 //Maximum is 4096 diff --git a/wled00/data/index.htm b/wled00/data/index.htm index 163512c3..6c899e6b 100644 --- a/wled00/data/index.htm +++ b/wled00/data/index.htm @@ -1,626 +1,705 @@ - - - - - -Brightness
-Brightness
+White channel
- -Color palette
-White channel
+ +Color palette
+Effect speed
-Effect intensity
-Effect mode
-Effect speed
+Effect intensity
+Effect mode
+Load from slot
- - - -Load from slot
+ + + +