Percent Effect from both ends of the strip (#660)
from 0 to 100 the strip will get color(0) starting at the ESP, from 200 to 100 to strip will do it the other way around. So, when using this effect for the staircase usermod, a person entering area near the ESP would set an intensity starting with 1 and getting bigger and leaving on the other side would need to further increase the intensity until 200. then the strip has color(1) again.
This commit is contained in:
parent
ca1f25ecf6
commit
06a5c1a798
@ -3013,21 +3013,34 @@ uint16_t WS2812FX::mode_plasma(void) {
|
|||||||
*/
|
*/
|
||||||
uint16_t WS2812FX::mode_percent(void) {
|
uint16_t WS2812FX::mode_percent(void) {
|
||||||
|
|
||||||
uint8_t percent = max(0, min(100, SEGMENT.intensity));
|
uint8_t percent = max(0, min(200, SEGMENT.intensity));
|
||||||
uint16_t active_leds = SEGLEN * percent / 100.0;
|
uint16_t active_leds = (percent < 100) ? SEGLEN * percent / 100.0
|
||||||
|
: SEGLEN * (200 - percent) / 100.0;
|
||||||
|
|
||||||
if (SEGENV.call == 0) SEGENV.step = 0;
|
if (SEGENV.call == 0) SEGENV.step = 0;
|
||||||
uint8_t size = (1 + ((SEGMENT.speed * SEGLEN) >> 11)) & 0xFF ;
|
uint8_t size = (1 + ((SEGMENT.speed * SEGLEN) >> 11)) & 0xFF ;
|
||||||
|
|
||||||
for (uint16_t i = 0; i < SEGLEN; i++) {
|
if (percent < 100) {
|
||||||
if (i < SEGENV.step) {
|
for (uint16_t i = 0; i < SEGLEN; i++) {
|
||||||
setPixelColor(i, color_from_palette(i, true, PALETTE_SOLID_WRAP, 0));
|
if (i < SEGENV.step) {
|
||||||
}
|
setPixelColor(i, color_from_palette(i, true, PALETTE_SOLID_WRAP, 0));
|
||||||
else {
|
}
|
||||||
setPixelColor(i, SEGCOLOR(1));
|
else {
|
||||||
}
|
setPixelColor(i, SEGCOLOR(1));
|
||||||
}
|
}
|
||||||
if(active_leds > SEGENV.step) {
|
}
|
||||||
|
} else {
|
||||||
|
for (uint16_t i = 0; i < SEGLEN; i++) {
|
||||||
|
if (i < (SEGLEN - SEGENV.step)) {
|
||||||
|
setPixelColor(i, SEGCOLOR(1));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
setPixelColor(i, color_from_palette(i, true, PALETTE_SOLID_WRAP, 0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(active_leds > SEGENV.step) { // smooth transition to the target value
|
||||||
SEGENV.step += size;
|
SEGENV.step += size;
|
||||||
if (SEGENV.step > active_leds) SEGENV.step = active_leds;
|
if (SEGENV.step > active_leds) SEGENV.step = active_leds;
|
||||||
} else if (active_leds < SEGENV.step) {
|
} else if (active_leds < SEGENV.step) {
|
||||||
|
Loading…
Reference in New Issue
Block a user