From 1d9d1f6bbdb3fe4070154dfeb00b938b429a50bb Mon Sep 17 00:00:00 2001 From: cschwinne Date: Mon, 25 Nov 2019 01:20:03 +0100 Subject: [PATCH] Simplified police code --- wled00/FX.cpp | 107 +++++++++++--------------------------------------- wled00/FX.h | 26 +++++------- 2 files changed, 34 insertions(+), 99 deletions(-) diff --git a/wled00/FX.cpp b/wled00/FX.cpp index c9bf76c5f..e4ee0aabf 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -2346,95 +2346,36 @@ uint16_t WS2812FX::mode_static_pattern() return FRAMETIME; } + +//American Police Light with all LEDs Red and Blue +uint16_t WS2812FX::mode_policeall() +{ + SEGENV.step++; + if (SEGENV.step >= SEGLEN) { + SEGENV.step = 0; + } + + uint16_t idexR = SEGENV.step; + uint16_t topindex = SEGLEN >> 1; + uint16_t idexB = idexR + topindex; + + if (idexR >= topindex) idexB -= SEGLEN; + + setPixelColor(idexR, RED); + setPixelColor(idexB, BLUE); + + return SPEED_FORMULA_L; +} + + //Police Lights Red and Blue uint16_t WS2812FX::mode_police() { + fill(SEGCOLOR(1)); - SEGENV.step += 1; - if (SEGENV.step >= SEGLEN) { - SEGENV.step = 0; - } - - uint16_t idexR = SEGENV.step; - uint16_t topindex = SEGLEN / 2; - uint16_t antipodal; - - antipodal = idexR + topindex; - - if (idexR >= topindex) { - antipodal = (idexR + topindex) % SEGLEN; - } - - uint16_t idexB = antipodal; - - - uint8_t thathue = (thishuepolice + 160) % 255; - - - for (uint16_t i = SEGMENT.start; i < SEGMENT.stop; i++) { - if (i == idexR) { - CRGB newcolor = CHSV(thishuepolice, thissat, 255); - setPixelColor(idexR, newcolor.r, newcolor.g, newcolor.b, 0x00); - } - else if (i == idexB) { - CRGB newcolor = CHSV(thathue, thissat, 255); - setPixelColor(idexB, newcolor.r, newcolor.g, newcolor.b, 0x00); - } - else { - setPixelColor(i, 0, 0, 0, 0); - } - } - return SPEED_FORMULA_L; + return mode_policeall(); } -//American Police Light with all LEDīs Red and Blue -uint16_t WS2812FX::mode_policeall() -{ - - SEGENV.step += 1; - if (SEGENV.step >= SEGLEN) { - SEGENV.step = 0; - } - - uint16_t idexR = SEGENV.step; - uint16_t topindex = SEGLEN / 2; - uint16_t antipodal; - - antipodal = idexR + topindex; - - if (idexR >= topindex) { - antipodal = (idexR + topindex) % SEGLEN; - } - - uint16_t idexB = antipodal; - - - uint8_t thathue = (thishuepolice + 160) % 255; - - CRGB indexRCol = CHSV(thishuepolice, thissat, 255); - CRGB indexBCol = CHSV(thathue, thissat, 255); - - setPixelColor(idexR, indexRCol.r, indexRCol.g, indexRCol.b, 0x00); - setPixelColor(idexB, indexBCol.r, indexBCol.g, indexBCol.b, 0x00); - - - return SPEED_FORMULA_L; - -} - -/* - * Lights every LED in a random color. Changes all LED at the same time - * to new random colors. - */ -uint16_t WS2812FX::mode_multi_dynamic() -{ - for (uint16_t i = SEGMENT.start; i <= SEGMENT.stop; i++) { - setPixelColor(i, color_wheel(random8(SEGMENT.intensity))); - } - return (SEGMENT.speed); -} - - //Speed slider sets number of "lights", intensity sets LEDs per light /*uint16_t WS2812FX::mode_static_pattern2() diff --git a/wled00/FX.h b/wled00/FX.h index 673a24b6f..076bc0b9b 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 87 +#define MODE_COUNT 86 #define FX_MODE_STATIC 0 #define FX_MODE_BLINK 1 @@ -171,9 +171,9 @@ #define FX_MODE_TWINKLECAT 81 #define FX_MODE_HALLOWEEN_EYES 82 #define FX_MODE_STATIC_PATTERN 83 -#define FX_MODE_POLICE 84 -#define FX_MODE_POLICE_ALL 85 -#define FX_MODE_MULTI_DYNAMIC 86 +#define FX_MODE_POLICE 84 +#define FX_MODE_POLICE_ALL 85 + class WS2812FX { typedef uint16_t (WS2812FX::*mode_ptr)(void); @@ -312,9 +312,8 @@ class WS2812FX { _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; - _mode[FX_MODE_POLICE] = &WS2812FX::mode_police; - _mode[FX_MODE_POLICE_ALL] = &WS2812FX::mode_policeall; - _mode[FX_MODE_MULTI_DYNAMIC] = &WS2812FX::mode_multi_dynamic; + _mode[FX_MODE_POLICE] = &WS2812FX::mode_police; + _mode[FX_MODE_POLICE_ALL] = &WS2812FX::mode_policeall; _brightness = DEFAULT_BRIGHTNESS; currentPalette = CRGBPalette16(CRGB::Black); @@ -492,9 +491,8 @@ class WS2812FX { mode_twinklecat(void), mode_halloween_eyes(void), mode_static_pattern(void), - mode_police(void), - mode_policeall(void), - mode_multi_dynamic(void); + mode_police(void), + mode_policeall(void); private: NeoPixelWrapper *bus; @@ -527,10 +525,6 @@ class WS2812FX { mode_ptr _mode[MODE_COUNT]; // SRAM footprint: 4 bytes per element - /*Define Variables for the Police Effects*/ - int thissat = 255; //-FX LOOPS DELAY VAR - uint8_t thishuepolice = 0; - // mode helper functions uint16_t blink(uint32_t, uint32_t, bool strobe, bool), @@ -567,9 +561,9 @@ const char JSON_mode_names[] PROGMEM = R"=====([ "Chase Rainbow","Chase Flash","Chase Flash Rnd","Rainbow Runner","Colorful","Traffic Light","Sweep Random","Running 2","Red & Blue","Stream", "Scanner","Lighthouse","Fireworks","Rain","Merry Christmas","Fire Flicker","Gradient","Loading","In Out","In In", "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", +"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","Solid Pattern","Police","Police All","Multi Dynamic" +"Twinklefox","Twinklecat","Halloween Eyes","Solid Pattern","Police","Police All" ])=====";