kopia lustrzana https://github.com/Aircoookie/WLED
				
				
				
			
							rodzic
							
								
									70d0aae07c
								
							
						
					
					
						commit
						6d4339b034
					
				| 
						 | 
				
			
			@ -99,7 +99,7 @@ void WS2812FX::setPixelColor(uint16_t i, byte r, byte g, byte b, byte w)
 | 
			
		|||
{
 | 
			
		||||
  if (_reverseMode) i = _length - 1 -i;
 | 
			
		||||
  if (_locked[i] && SEGMENT.mode != FX_MODE_FIRE_2012) return;
 | 
			
		||||
  if (IS_REVERSE) i = SEGMENT.stop - (i - SEGMENT.start); //reverse just individual segment
 | 
			
		||||
  if (IS_REVERSE)   i = SEGMENT.stop - (i - SEGMENT.start); //reverse just individual segment
 | 
			
		||||
  if (!_cronixieMode)
 | 
			
		||||
  {
 | 
			
		||||
    if (_skipFirstMode) {i++;if(i==1)bus->SetPixelColor(i, RgbwColor(0,0,0,0));}
 | 
			
		||||
| 
						 | 
				
			
			@ -191,6 +191,10 @@ void WS2812FX::setIntensity(uint8_t in) {
 | 
			
		|||
  _segments[0].intensity = in;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void WS2812FX::setPalette(uint8_t p) {
 | 
			
		||||
  _segments[0].palette = p;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void WS2812FX::setColor(uint8_t r, uint8_t g, uint8_t b, uint8_t w) {
 | 
			
		||||
  setColor(((uint32_t)w << 24) |((uint32_t)r << 16) | ((uint32_t)g << 8) | b);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -201,13 +205,11 @@ void WS2812FX::setSecondaryColor(uint8_t r, uint8_t g, uint8_t b, uint8_t w) {
 | 
			
		|||
 | 
			
		||||
void WS2812FX::setColor(uint32_t c) {
 | 
			
		||||
  _segments[0].colors[0] = c;
 | 
			
		||||
  _triggered = true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void WS2812FX::setSecondaryColor(uint32_t c) {
 | 
			
		||||
  _segments[0].colors[1] = c;
 | 
			
		||||
  if (_cronixieMode) _cronixieSecMultiplier = getSafePowerMultiplier(900, 100, c, _brightness);
 | 
			
		||||
  _triggered = true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void WS2812FX::setBrightness(uint8_t b) {
 | 
			
		||||
| 
						 | 
				
			
			@ -369,6 +371,14 @@ void WS2812FX::unlockAll()
 | 
			
		|||
  for (int i=0; i < _length; i++) _locked[i] = false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void WS2812FX::setTransitionMode(bool t)
 | 
			
		||||
{
 | 
			
		||||
  SEGMENT_RUNTIME.trans_act = (t) ? 1:2;
 | 
			
		||||
  if (!t) return;
 | 
			
		||||
  unsigned long waitMax = millis() + 20; //refresh after 20 seconds if transition enabled
 | 
			
		||||
  if (SEGMENT.mode == FX_MODE_STATIC && SEGMENT_RUNTIME.next_time > waitMax) SEGMENT_RUNTIME.next_time = waitMax;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * color blend function
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -483,7 +493,7 @@ uint16_t WS2812FX::mode_static(void) {
 | 
			
		|||
  for(uint16_t i=SEGMENT.start; i <= SEGMENT.stop; i++) {
 | 
			
		||||
    setPixelColor(i, SEGMENT.colors[0]);
 | 
			
		||||
  }
 | 
			
		||||
  return 500;
 | 
			
		||||
  return (SEGMENT_RUNTIME.trans_act == 1) ? 20 : 500;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1864,6 +1874,44 @@ uint16_t WS2812FX::mode_oscillate(void)
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
uint16_t WS2812FX::mode_lightning(void)
 | 
			
		||||
{
 | 
			
		||||
  uint16_t ledstart = SEGMENT.start + random8(SEGMENT_LENGTH);                               // Determine starting location of flash
 | 
			
		||||
  uint16_t ledlen = random8(SEGMENT.stop - ledstart);                      // Determine length of flash (not to go beyond NUM_LEDS-1)
 | 
			
		||||
  uint8_t bri = 255/random8(1, 3);   
 | 
			
		||||
 | 
			
		||||
  if (SEGMENT_RUNTIME.counter_mode_step == 0)
 | 
			
		||||
  {
 | 
			
		||||
    SEGMENT_RUNTIME.aux_param = random8(3, 3 + SEGMENT.intensity/20); //number of flashes
 | 
			
		||||
    bri = 52; 
 | 
			
		||||
    SEGMENT_RUNTIME.aux_param2 = 1;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  for (int i = SEGMENT.start; i <= SEGMENT.stop; i++)
 | 
			
		||||
  {
 | 
			
		||||
    setPixelColor(i,SEGMENT.colors[1]);
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  if (SEGMENT_RUNTIME.aux_param2) {
 | 
			
		||||
    for (int i = ledstart; i < ledstart + ledlen; i++)
 | 
			
		||||
    {
 | 
			
		||||
      setPixelColor(i,bri,bri,bri,bri);
 | 
			
		||||
    }
 | 
			
		||||
    SEGMENT_RUNTIME.aux_param2 = 0;
 | 
			
		||||
    SEGMENT_RUNTIME.counter_mode_step++;
 | 
			
		||||
    return random8(4, 10);                                    // each flash only lasts 4-10 milliseconds
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  SEGMENT_RUNTIME.aux_param2 = 1;
 | 
			
		||||
  if (SEGMENT_RUNTIME.counter_mode_step == 1) return (200);                       // longer delay until next flash after the leader
 | 
			
		||||
 | 
			
		||||
  if (SEGMENT_RUNTIME.counter_mode_step <= SEGMENT_RUNTIME.aux_param) return (50 + random8(100));  // shorter delay between strokes
 | 
			
		||||
 | 
			
		||||
  SEGMENT_RUNTIME.counter_mode_step = 0;
 | 
			
		||||
  return (random8(255 - SEGMENT.speed) * 100);                            // delay between strikes
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// WLED limitation: Analog Clock overlay will NOT work when Fire2012 is active
 | 
			
		||||
// Fire2012 by Mark Kriegsman, July 2012
 | 
			
		||||
// as part of "Five Elements" shown here: http://youtu.be/knWiGsmgycY
 | 
			
		||||
| 
						 | 
				
			
			@ -1925,21 +1973,6 @@ uint16_t WS2812FX::mode_fire_2012(void)
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
uint16_t WS2812FX::mode_bpm(void)
 | 
			
		||||
{
 | 
			
		||||
  CRGB fastled_col;
 | 
			
		||||
  CRGBPalette16 palette = PartyColors_p;
 | 
			
		||||
  uint8_t beat = beatsin8(SEGMENT.speed, 64, 255);
 | 
			
		||||
  for ( int i = SEGMENT.start; i <= SEGMENT.stop; i++) {
 | 
			
		||||
    fastled_col = ColorFromPalette(palette, SEGMENT_RUNTIME.counter_mode_step + (i * 2), beat - SEGMENT_RUNTIME.counter_mode_step + (i * 10));
 | 
			
		||||
    setPixelColor(i, fastled_col.red, fastled_col.green, fastled_col.blue);
 | 
			
		||||
  }
 | 
			
		||||
  SEGMENT_RUNTIME.counter_mode_step++;
 | 
			
		||||
  if (SEGMENT_RUNTIME.counter_mode_step >= 255) SEGMENT_RUNTIME.counter_mode_step = 0;
 | 
			
		||||
  return 20;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
uint16_t WS2812FX::mode_juggle(void){
 | 
			
		||||
  fade_out((255-SEGMENT.intensity) / 32);
 | 
			
		||||
  CRGB fastled_col;
 | 
			
		||||
| 
						 | 
				
			
			@ -1957,22 +1990,134 @@ uint16_t WS2812FX::mode_juggle(void){
 | 
			
		|||
  return 10 + (uint16_t)(255 - SEGMENT.speed)/4;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * FastLED palette modes helper function. Limitation: Due to memory reasons, multiple active segments with FastLED will disable the Palette transitions
 | 
			
		||||
 */
 | 
			
		||||
CRGBPalette16 currentPalette(CRGB::Black);
 | 
			
		||||
CRGBPalette16 targetPalette(CloudColors_p);
 | 
			
		||||
 | 
			
		||||
void WS2812FX::handle_palette(void)
 | 
			
		||||
{
 | 
			
		||||
  bool singleSegmentMode = (_segment_index == _segment_index_palette_last);
 | 
			
		||||
  _segment_index_palette_last = _segment_index;
 | 
			
		||||
  
 | 
			
		||||
  switch (SEGMENT.palette)
 | 
			
		||||
  {
 | 
			
		||||
    case 0: {//periodically replace palette with a random one. Doesn't work with multiple FastLED segments
 | 
			
		||||
      if (!singleSegmentMode)
 | 
			
		||||
      {
 | 
			
		||||
        targetPalette = PartyColors_p; break; //fallback
 | 
			
		||||
      }
 | 
			
		||||
      if (millis() - _lastPaletteChange > 1000 + ((uint32_t)(255-SEGMENT.intensity))*100)
 | 
			
		||||
      {
 | 
			
		||||
        targetPalette = CRGBPalette16(
 | 
			
		||||
                        CHSV(random8(), 255, random8(128, 255)),
 | 
			
		||||
                        CHSV(random8(), 255, random8(128, 255)),
 | 
			
		||||
                        CHSV(random8(), 192, random8(128, 255)),
 | 
			
		||||
                        CHSV(random8(), 255, random8(128, 255)));
 | 
			
		||||
        _lastPaletteChange = millis();
 | 
			
		||||
      } break;}
 | 
			
		||||
    case 1: {//primary color only
 | 
			
		||||
      CRGB prim;
 | 
			
		||||
      prim.red   = (SEGMENT.colors[0] >> 16 & 0xFF);
 | 
			
		||||
      prim.green = (SEGMENT.colors[0] >> 8  & 0xFF);
 | 
			
		||||
      prim.blue  = (SEGMENT.colors[0]       & 0xFF);
 | 
			
		||||
      targetPalette = CRGBPalette16(prim); break;}
 | 
			
		||||
    case 2: {//based on primary
 | 
			
		||||
      //considering performance implications
 | 
			
		||||
      CRGB prim;
 | 
			
		||||
      prim.red   = (SEGMENT.colors[0] >> 16 & 0xFF);
 | 
			
		||||
      prim.green = (SEGMENT.colors[0] >> 8  & 0xFF);
 | 
			
		||||
      prim.blue  = (SEGMENT.colors[0]       & 0xFF);
 | 
			
		||||
      CHSV prim_hsv = rgb2hsv_approximate(prim);
 | 
			
		||||
      targetPalette = CRGBPalette16(
 | 
			
		||||
                      CHSV(prim_hsv.h, prim_hsv.s, prim_hsv.v), //color itself
 | 
			
		||||
                      CHSV(prim_hsv.h, max(prim_hsv.s - 50,0), prim_hsv.v), //less saturated
 | 
			
		||||
                      CHSV(prim_hsv.h, prim_hsv.s, max(prim_hsv.h - 50,0)), //darker
 | 
			
		||||
                      CHSV(prim_hsv.h, prim_hsv.s, prim_hsv.v)); //color itself
 | 
			
		||||
      break;}
 | 
			
		||||
    case 3: {//primary + secondary
 | 
			
		||||
      CRGB prim;
 | 
			
		||||
      prim.red   = (SEGMENT.colors[0] >> 16 & 0xFF);
 | 
			
		||||
      prim.green = (SEGMENT.colors[0] >> 8  & 0xFF);
 | 
			
		||||
      prim.blue  = (SEGMENT.colors[0]       & 0xFF);
 | 
			
		||||
      CRGB sec;
 | 
			
		||||
      sec.red    = (SEGMENT.colors[1] >> 16 & 0xFF);
 | 
			
		||||
      sec.green  = (SEGMENT.colors[1] >> 8  & 0xFF);
 | 
			
		||||
      sec.blue   = (SEGMENT.colors[1]       & 0xFF);
 | 
			
		||||
      targetPalette = CRGBPalette16(prim,sec,prim); break;}
 | 
			
		||||
    case 4: {//based on primary + secondary
 | 
			
		||||
      CRGB prim;
 | 
			
		||||
      prim.red   = (SEGMENT.colors[0] >> 16 & 0xFF);
 | 
			
		||||
      prim.green = (SEGMENT.colors[0] >> 8  & 0xFF);
 | 
			
		||||
      prim.blue  = (SEGMENT.colors[0]       & 0xFF);
 | 
			
		||||
      CRGB sec;
 | 
			
		||||
      sec.red    = (SEGMENT.colors[1] >> 16 & 0xFF);
 | 
			
		||||
      sec.green  = (SEGMENT.colors[1] >> 8  & 0xFF);
 | 
			
		||||
      sec.blue   = (SEGMENT.colors[1]       & 0xFF);
 | 
			
		||||
      CHSV prim_hsv = rgb2hsv_approximate(prim);
 | 
			
		||||
      CHSV sec_hsv  = rgb2hsv_approximate(sec );
 | 
			
		||||
      targetPalette = CRGBPalette16(
 | 
			
		||||
                      CHSV(prim_hsv.h, prim_hsv.s, prim_hsv.v), //color itself
 | 
			
		||||
                      CHSV(prim_hsv.h, max(prim_hsv.s - 50,0), prim_hsv.v), //less saturated
 | 
			
		||||
                      CHSV(sec_hsv.h, sec_hsv.s, max(sec_hsv.v - 50,0)), //darker
 | 
			
		||||
                      CHSV(sec_hsv.h, sec_hsv.s, sec_hsv.v)); //color itself
 | 
			
		||||
      break;}
 | 
			
		||||
    case 5: //Party colors
 | 
			
		||||
      targetPalette = PartyColors_p; break;
 | 
			
		||||
    case 6: //Cloud colors
 | 
			
		||||
      targetPalette = CloudColors_p; break;
 | 
			
		||||
    case 7: //Lava colors
 | 
			
		||||
      targetPalette = LavaColors_p; break;
 | 
			
		||||
    case 8: //Ocean colors
 | 
			
		||||
      targetPalette = OceanColors_p; break;
 | 
			
		||||
    case 9: //Forest colors
 | 
			
		||||
      targetPalette = ForestColors_p; break;
 | 
			
		||||
    case 10: //Rainbow colors
 | 
			
		||||
      targetPalette = RainbowColors_p; break;
 | 
			
		||||
    case 11: //Rainbow stripe colors
 | 
			
		||||
      targetPalette = RainbowStripeColors_p; break;
 | 
			
		||||
    default: //fallback for illegal values
 | 
			
		||||
      targetPalette = PartyColors_p; break;
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  if (singleSegmentMode) //only blend if just one segment uses FastLED mode
 | 
			
		||||
  {
 | 
			
		||||
    nblendPaletteTowardPalette(currentPalette, targetPalette, 42);
 | 
			
		||||
  } else
 | 
			
		||||
  {
 | 
			
		||||
    currentPalette = targetPalette;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
uint16_t WS2812FX::mode_palette(void)
 | 
			
		||||
{
 | 
			
		||||
  handle_palette();
 | 
			
		||||
  CRGB fastled_col;
 | 
			
		||||
 | 
			
		||||
  for (uint16_t i = SEGMENT.start; i <= SEGMENT.stop; i++)
 | 
			
		||||
  {
 | 
			
		||||
    uint8_t colorIndex = map(i,SEGMENT.start,SEGMENT.stop,0,255) + (SEGMENT_RUNTIME.counter_mode_step >> 8 & 0xFF);
 | 
			
		||||
    fastled_col = ColorFromPalette( PartyColors_p, colorIndex, 255, LINEARBLEND);
 | 
			
		||||
    uint8_t colorIndex = map(i,SEGMENT.start,SEGMENT.stop,0,255) + (SEGMENT_RUNTIME.counter_mode_step >> 6 & 0xFF);
 | 
			
		||||
    fastled_col = ColorFromPalette( currentPalette, colorIndex, 255, LINEARBLEND);
 | 
			
		||||
    setPixelColor(i, fastled_col.red, fastled_col.green, fastled_col.blue);
 | 
			
		||||
  }
 | 
			
		||||
  SEGMENT_RUNTIME.counter_mode_step += SEGMENT.speed;
 | 
			
		||||
  if (SEGMENT.speed == 0) SEGMENT_RUNTIME.counter_mode_step = 0;
 | 
			
		||||
  return 20;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
uint16_t WS2812FX::mode_bpm(void)
 | 
			
		||||
{
 | 
			
		||||
  handle_palette();
 | 
			
		||||
  CRGB fastled_col;
 | 
			
		||||
  uint8_t beat = beatsin8(SEGMENT.speed, 64, 255);
 | 
			
		||||
  for ( int i = SEGMENT.start; i <= SEGMENT.stop; i++) {
 | 
			
		||||
    fastled_col = ColorFromPalette(currentPalette, SEGMENT_RUNTIME.counter_mode_step + (i * 2), beat - SEGMENT_RUNTIME.counter_mode_step + (i * 10));
 | 
			
		||||
    setPixelColor(i, fastled_col.red, fastled_col.green, fastled_col.blue);
 | 
			
		||||
  }
 | 
			
		||||
  SEGMENT_RUNTIME.counter_mode_step++;
 | 
			
		||||
  if (SEGMENT_RUNTIME.counter_mode_step >= 255) SEGMENT_RUNTIME.counter_mode_step = 0;
 | 
			
		||||
  return 20;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1980,33 +2125,23 @@ uint16_t WS2812FX::mode_palette(void)
 | 
			
		|||
uint16_t WS2812FX::mode_fillnoise8(void)
 | 
			
		||||
{
 | 
			
		||||
  if (SEGMENT_RUNTIME.counter_mode_call == 0) SEGMENT_RUNTIME.counter_mode_step = random(12345);
 | 
			
		||||
  handle_palette();
 | 
			
		||||
  CRGB fastled_col;
 | 
			
		||||
  nblendPaletteTowardPalette(currentPalette, targetPalette, 42);
 | 
			
		||||
  for (int i = SEGMENT.start; i <= SEGMENT.stop; i++) {
 | 
			
		||||
    uint8_t index = inoise8(i * SEGMENT_LENGTH, SEGMENT_RUNTIME.counter_mode_step + i * SEGMENT_LENGTH) % 255;
 | 
			
		||||
    fastled_col = ColorFromPalette(currentPalette, index, 255, LINEARBLEND);
 | 
			
		||||
    setPixelColor(i, fastled_col.red, fastled_col.green, fastled_col.blue);
 | 
			
		||||
  }
 | 
			
		||||
  SEGMENT_RUNTIME.counter_mode_step += beatsin8(10, 1, 4);
 | 
			
		||||
  SEGMENT_RUNTIME.counter_mode_step += beatsin8(SEGMENT.speed, 1, 4); //10,1,4
 | 
			
		||||
 | 
			
		||||
  if (SEGMENT_RUNTIME.counter_mode_call >= 20 + (255 - SEGMENT.intensity) *4) //swap to new random palette
 | 
			
		||||
  {
 | 
			
		||||
     targetPalette = CRGBPalette16(
 | 
			
		||||
                     CHSV(random8(), 255, random8(128, 255)),
 | 
			
		||||
                     CHSV(random8(), 255, random8(128, 255)),
 | 
			
		||||
                     CHSV(random8(), 192, random8(128, 255)),
 | 
			
		||||
                     CHSV(random8(), 255, random8(128, 255)));
 | 
			
		||||
     SEGMENT_RUNTIME.counter_mode_call = 1;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return 15 + (uint16_t)(255 - SEGMENT.speed);
 | 
			
		||||
  return 20;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
uint16_t WS2812FX::mode_noise16_1(void)
 | 
			
		||||
{
 | 
			
		||||
  uint16_t scale = 100 + SEGMENT.intensity*7;                                      // the "zoom factor" for the noise
 | 
			
		||||
  CRGBPalette16 palette = OceanColors_p;
 | 
			
		||||
  uint16_t scale = 750;                                      // the "zoom factor" for the noise
 | 
			
		||||
  handle_palette();
 | 
			
		||||
  CRGB fastled_col;
 | 
			
		||||
  SEGMENT_RUNTIME.counter_mode_step += (1 + SEGMENT.speed/16);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2024,7 +2159,7 @@ uint16_t WS2812FX::mode_noise16_1(void)
 | 
			
		|||
 | 
			
		||||
    uint8_t index = sin8(noise * 3);                         // map LED color based on noise data
 | 
			
		||||
 | 
			
		||||
    fastled_col = ColorFromPalette(palette, index, noise, LINEARBLEND);   // With that value, look up the 8 bit colour palette value and assign it to the current LED.
 | 
			
		||||
    fastled_col = ColorFromPalette(currentPalette, index, 255, LINEARBLEND);   // With that value, look up the 8 bit colour palette value and assign it to the current LED.
 | 
			
		||||
    setPixelColor(i, fastled_col.red, fastled_col.green, fastled_col.blue);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2034,8 +2169,8 @@ uint16_t WS2812FX::mode_noise16_1(void)
 | 
			
		|||
 | 
			
		||||
uint16_t WS2812FX::mode_noise16_2(void)
 | 
			
		||||
{
 | 
			
		||||
  uint8_t scale = 100 + SEGMENT.intensity*7;                                       // the "zoom factor" for the noise
 | 
			
		||||
  CRGBPalette16 palette = LavaColors_p;
 | 
			
		||||
  uint8_t scale = 750;                                       // the "zoom factor" for the noise
 | 
			
		||||
  handle_palette();
 | 
			
		||||
  CRGB fastled_col;
 | 
			
		||||
  SEGMENT_RUNTIME.counter_mode_step += (1 + SEGMENT.speed);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2052,7 +2187,7 @@ uint16_t WS2812FX::mode_noise16_2(void)
 | 
			
		|||
 | 
			
		||||
    uint8_t index = sin8(noise * 3);                          // map led color based on noise data
 | 
			
		||||
 | 
			
		||||
    fastled_col = ColorFromPalette(palette, index, noise, LINEARBLEND);   // With that value, look up the 8 bit colour palette value and assign it to the current LED.
 | 
			
		||||
    fastled_col = ColorFromPalette(currentPalette, index, noise, LINEARBLEND);   // With that value, look up the 8 bit colour palette value and assign it to the current LED.
 | 
			
		||||
    setPixelColor(i, fastled_col.red, fastled_col.green, fastled_col.blue);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2062,8 +2197,8 @@ uint16_t WS2812FX::mode_noise16_2(void)
 | 
			
		|||
 | 
			
		||||
uint16_t WS2812FX::mode_noise16_3(void)
 | 
			
		||||
{
 | 
			
		||||
  uint8_t scale = 100 + SEGMENT.intensity*7;                                       // the "zoom factor" for the noise
 | 
			
		||||
  CRGBPalette16 palette = CloudColors_p;
 | 
			
		||||
  uint8_t scale = 750;                                       // the "zoom factor" for the noise
 | 
			
		||||
  handle_palette();
 | 
			
		||||
  CRGB fastled_col;
 | 
			
		||||
  SEGMENT_RUNTIME.counter_mode_step += (1 + SEGMENT.speed);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2080,7 +2215,7 @@ uint16_t WS2812FX::mode_noise16_3(void)
 | 
			
		|||
 | 
			
		||||
    uint8_t index = sin8(noise * 3);                          // map led color based on noise data
 | 
			
		||||
 | 
			
		||||
    fastled_col = ColorFromPalette(palette, index, noise, LINEARBLEND);   // With that value, look up the 8 bit colour palette value and assign it to the current LED.
 | 
			
		||||
    fastled_col = ColorFromPalette(currentPalette, index, noise, LINEARBLEND);   // With that value, look up the 8 bit colour palette value and assign it to the current LED.
 | 
			
		||||
    setPixelColor(i, fastled_col.red, fastled_col.green, fastled_col.blue);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2091,53 +2226,15 @@ uint16_t WS2812FX::mode_noise16_3(void)
 | 
			
		|||
//https://github.com/aykevl/ledstrip-spark/blob/master/ledstrip.ino
 | 
			
		||||
uint16_t WS2812FX::mode_noise16_4(void)
 | 
			
		||||
{
 | 
			
		||||
  CRGBPalette16 palette = OceanColors_p;
 | 
			
		||||
  handle_palette();
 | 
			
		||||
  CRGB fastled_col;
 | 
			
		||||
  SEGMENT_RUNTIME.counter_mode_step += SEGMENT.speed;
 | 
			
		||||
  for (int i = SEGMENT.start; i <= SEGMENT.stop; i++) {
 | 
			
		||||
    int16_t index = inoise16(uint32_t(i - SEGMENT.start) << 12, SEGMENT_RUNTIME.counter_mode_step/8);
 | 
			
		||||
    fastled_col = ColorFromPalette(palette, index);
 | 
			
		||||
    fastled_col = ColorFromPalette(currentPalette, index);
 | 
			
		||||
    setPixelColor(i, fastled_col.red, fastled_col.green, fastled_col.blue);
 | 
			
		||||
  }
 | 
			
		||||
  return 20;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
uint16_t WS2812FX::mode_lightning(void)
 | 
			
		||||
{
 | 
			
		||||
  uint16_t ledstart = SEGMENT.start + random8(SEGMENT_LENGTH);                               // Determine starting location of flash
 | 
			
		||||
  uint16_t ledlen = random8(SEGMENT.stop - ledstart);                      // Determine length of flash (not to go beyond NUM_LEDS-1)
 | 
			
		||||
  uint8_t bri = 255/random8(1, 3);   
 | 
			
		||||
 | 
			
		||||
  if (SEGMENT_RUNTIME.counter_mode_step == 0)
 | 
			
		||||
  {
 | 
			
		||||
    SEGMENT_RUNTIME.aux_param = random8(3, 3 + SEGMENT.intensity/20); //number of flashes
 | 
			
		||||
    bri = 52; 
 | 
			
		||||
    SEGMENT_RUNTIME.aux_param2 = 1;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  for (int i = SEGMENT.start; i <= SEGMENT.stop; i++)
 | 
			
		||||
  {
 | 
			
		||||
    setPixelColor(i,SEGMENT.colors[1]);
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  if (SEGMENT_RUNTIME.aux_param2) {
 | 
			
		||||
    for (int i = ledstart; i < ledstart + ledlen; i++)
 | 
			
		||||
    {
 | 
			
		||||
      setPixelColor(i,bri,bri,bri,bri);
 | 
			
		||||
    }
 | 
			
		||||
    SEGMENT_RUNTIME.aux_param2 = 0;
 | 
			
		||||
    SEGMENT_RUNTIME.counter_mode_step++;
 | 
			
		||||
    return random8(4, 10);                                    // each flash only lasts 4-10 milliseconds
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  SEGMENT_RUNTIME.aux_param2 = 1;
 | 
			
		||||
  if (SEGMENT_RUNTIME.counter_mode_step == 1) return (200);                       // longer delay until next flash after the leader
 | 
			
		||||
 | 
			
		||||
  if (SEGMENT_RUNTIME.counter_mode_step <= SEGMENT_RUNTIME.aux_param) return (50 + random8(100));  // shorter delay between strokes
 | 
			
		||||
 | 
			
		||||
  SEGMENT_RUNTIME.counter_mode_step = 0;
 | 
			
		||||
  return (random8(255 - SEGMENT.speed) * 100);                            // delay between strikes
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -51,7 +51,7 @@
 | 
			
		|||
 | 
			
		||||
/* each segment uses 38 bytes of SRAM memory, so if you're application fails because of
 | 
			
		||||
  insufficient memory, decreasing MAX_NUM_SEGMENTS may help */
 | 
			
		||||
#define MAX_NUM_SEGMENTS 12
 | 
			
		||||
#define MAX_NUM_SEGMENTS 10
 | 
			
		||||
#define NUM_COLORS        3 /* number of colors per segment */
 | 
			
		||||
#define SEGMENT          _segments[_segment_index]
 | 
			
		||||
#define SEGMENT_RUNTIME  _segment_runtimes[_segment_index]
 | 
			
		||||
| 
						 | 
				
			
			@ -162,11 +162,12 @@ class WS2812FX {
 | 
			
		|||
  
 | 
			
		||||
  // segment parameters
 | 
			
		||||
  public:
 | 
			
		||||
    typedef struct Segment { // 20 bytes
 | 
			
		||||
    typedef struct Segment { // 21 bytes
 | 
			
		||||
      uint16_t start;
 | 
			
		||||
      uint16_t stop;
 | 
			
		||||
      uint8_t speed;
 | 
			
		||||
      uint8_t intensity;
 | 
			
		||||
      uint8_t palette;
 | 
			
		||||
      uint8_t  mode;
 | 
			
		||||
      uint8_t  options;
 | 
			
		||||
      uint32_t colors[NUM_COLORS];
 | 
			
		||||
| 
						 | 
				
			
			@ -179,7 +180,7 @@ class WS2812FX {
 | 
			
		|||
      uint32_t counter_mode_call;
 | 
			
		||||
      uint16_t aux_param;
 | 
			
		||||
      uint16_t aux_param2;
 | 
			
		||||
      bool trans_act;
 | 
			
		||||
      uint8_t trans_act;
 | 
			
		||||
    } segment_runtime;
 | 
			
		||||
 | 
			
		||||
    WS2812FX() {
 | 
			
		||||
| 
						 | 
				
			
			@ -280,6 +281,7 @@ class WS2812FX {
 | 
			
		|||
      setMode(uint8_t m),
 | 
			
		||||
      setSpeed(uint8_t s),
 | 
			
		||||
      setIntensity(uint8_t i),
 | 
			
		||||
      setPalette(uint8_t p),
 | 
			
		||||
      setColor(uint8_t r, uint8_t g, uint8_t b, uint8_t w = 0),
 | 
			
		||||
      setSecondaryColor(uint8_t r, uint8_t g, uint8_t b, uint8_t w = 0),
 | 
			
		||||
      setColor(uint32_t c),
 | 
			
		||||
| 
						 | 
				
			
			@ -296,6 +298,7 @@ class WS2812FX {
 | 
			
		|||
      unlock(uint16_t i),
 | 
			
		||||
      unlockRange(uint16_t i, uint16_t i2),
 | 
			
		||||
      unlockAll(void),
 | 
			
		||||
      setTransitionMode(bool t),
 | 
			
		||||
      trigger(void),
 | 
			
		||||
      setNumSegments(uint8_t n),
 | 
			
		||||
      setSegment(uint8_t n, uint16_t start, uint16_t stop, uint8_t mode, uint32_t color,   uint8_t speed, uint8_t intensity, bool reverse),
 | 
			
		||||
| 
						 | 
				
			
			@ -427,6 +430,8 @@ class WS2812FX {
 | 
			
		|||
    uint16_t _rand16seed;
 | 
			
		||||
    uint8_t _brightness;
 | 
			
		||||
 | 
			
		||||
    void handle_palette(void);
 | 
			
		||||
 | 
			
		||||
    double
 | 
			
		||||
      _cronixieSecMultiplier;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -444,7 +449,11 @@ class WS2812FX {
 | 
			
		|||
 | 
			
		||||
    mode_ptr _mode[MODE_COUNT]; // SRAM footprint: 4 bytes per element
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    uint32_t _lastPaletteChange = 0;
 | 
			
		||||
    
 | 
			
		||||
    uint8_t _segment_index = 0;
 | 
			
		||||
    uint8_t _segment_index_palette_last = 99;
 | 
			
		||||
    uint8_t _num_segments = 1;
 | 
			
		||||
    segment _segments[MAX_NUM_SEGMENTS] = { // SRAM footprint: 20 bytes per element
 | 
			
		||||
      // start, stop, speed, intensity, mode, options, color[]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -122,7 +122,7 @@
 | 
			
		|||
		}
 | 
			
		||||
		function GP()
 | 
			
		||||
		{
 | 
			
		||||
			resp+= "&FP=" + Cf.TX.selectedIndex;
 | 
			
		||||
			resp+= "&FP=" + Cf.FP.selectedIndex;
 | 
			
		||||
			GIO();
 | 
			
		||||
		}
 | 
			
		||||
		function CV(v)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											Plik binarny nie jest wyświetlany.
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| 
						 | 
				
			
			@ -97,6 +97,7 @@ Default brightness: <input name="CA" type="number" min="0" max="255" required> (
 | 
			
		|||
Default effect ID: <input name="FX" type="number" min="0" max="57" required><br>
 | 
			
		||||
Default effect speed: <input name="SX" type="number" min="0" max="255" required><br>
 | 
			
		||||
Default effect intensity: <input name="IX" type="number" min="0" max="255" required><br>
 | 
			
		||||
Default effect palette: <input name="FP" type="number" min="0" max="255" required><br>
 | 
			
		||||
Default secondary RGB(W):<br>
 | 
			
		||||
<input name="SR" type="number" min="0" max="255" required>
 | 
			
		||||
<input name="SG" type="number" min="0" max="255" required>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -39,7 +39,7 @@
 | 
			
		|||
#include "src/dependencies/e131/E131.h"
 | 
			
		||||
 | 
			
		||||
//version in format yymmddb (b = daily build)
 | 
			
		||||
#define VERSION 1809041
 | 
			
		||||
#define VERSION 1809062
 | 
			
		||||
char versionString[] = "0.8.0-a";
 | 
			
		||||
 | 
			
		||||
//AP and OTA default passwords (change them!)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -120,7 +120,8 @@ void saveSettingsToEEPROM()
 | 
			
		|||
  EEPROM.write(370, useHSBDefault);
 | 
			
		||||
  EEPROM.write(371, whiteS);
 | 
			
		||||
  EEPROM.write(372, useRGBW);
 | 
			
		||||
 | 
			
		||||
  EEPROM.write(373, effectPaletteDefault);
 | 
			
		||||
  
 | 
			
		||||
  EEPROM.write(375, apWaitTimeSecs);
 | 
			
		||||
  EEPROM.write(376, recoveryAPDisabled);
 | 
			
		||||
  EEPROM.write(377, EEPVER); //eeprom was updated to latest
 | 
			
		||||
| 
						 | 
				
			
			@ -354,6 +355,7 @@ void loadSettingsFromEEPROM(bool first)
 | 
			
		|||
  useHSBDefault = EEPROM.read(370);
 | 
			
		||||
  whiteS = EEPROM.read(371); white = whiteS;
 | 
			
		||||
  useRGBW = EEPROM.read(372);
 | 
			
		||||
  effectPaletteDefault = EEPROM.read(373); effectPalette = effectPaletteDefault;
 | 
			
		||||
 | 
			
		||||
  if (lastEEPROMversion > 0) { 
 | 
			
		||||
    apWaitTimeSecs = EEPROM.read(375);
 | 
			
		||||
| 
						 | 
				
			
			@ -501,12 +503,13 @@ void loadSettingsFromEEPROM(bool first)
 | 
			
		|||
  strip.setMode(effectCurrent);
 | 
			
		||||
  strip.setSpeed(effectSpeed);
 | 
			
		||||
  strip.setIntensity(effectIntensity);
 | 
			
		||||
  strip.setPalette(effectPalette);
 | 
			
		||||
  overlayCurrent = overlayDefault;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//PRESET PROTOCOL 20 bytes
 | 
			
		||||
//0: preset purpose byte 0:invalid 1:valid preset 1.0
 | 
			
		||||
//1:a 2:r 3:g 4:b 5:w 6:er 7:eg 8:eb 9:ew 10:fx 11:sx | custom chase 12:numP 13:numS 14:(0:fs 1:both 2:fe) 15:step 16:ix 17-19:Zeros
 | 
			
		||||
//1:a 2:r 3:g 4:b 5:w 6:er 7:eg 8:eb 9:ew 10:fx 11:sx | custom chase 12:numP 13:numS 14:(0:fs 1:both 2:fe) 15:step 16:ix 17: fp 18-19:Zeros
 | 
			
		||||
 | 
			
		||||
void applyPreset(byte index, bool loadBri, bool loadCol, bool loadFX)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -535,6 +538,7 @@ void applyPreset(byte index, bool loadBri, bool loadCol, bool loadFX)
 | 
			
		|||
    if (lastfx != effectCurrent) strip.setMode(effectCurrent);
 | 
			
		||||
    strip.setSpeed(effectSpeed);
 | 
			
		||||
    strip.setIntensity(effectIntensity);
 | 
			
		||||
    strip.setPalette(effectPalette);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -557,6 +561,7 @@ void savePreset(byte index)
 | 
			
		|||
  EEPROM.write(i+11, effectSpeed);
 | 
			
		||||
  
 | 
			
		||||
  EEPROM.write(i+16, effectIntensity);
 | 
			
		||||
  EEPROM.write(i+17, effectPalette);
 | 
			
		||||
  EEPROM.commit();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -39,7 +39,9 @@ void XML_response()
 | 
			
		|||
   oappendi(effectSpeed);
 | 
			
		||||
   oappend("</sx><ix>");
 | 
			
		||||
   oappendi(effectIntensity);
 | 
			
		||||
   oappend("</ix><wv>");
 | 
			
		||||
   oappend("</ix><fp>");
 | 
			
		||||
   oappendi(effectPalette);
 | 
			
		||||
   oappend("</fp><wv>");
 | 
			
		||||
   if (useRGBW && !autoRGBtoRGBW) {
 | 
			
		||||
     oappendi(white);
 | 
			
		||||
   } else {
 | 
			
		||||
| 
						 | 
				
			
			@ -185,6 +187,7 @@ void getSettingsJS(byte subPage) //get values for settings form in javascript
 | 
			
		|||
    sappend('v',"FX",effectDefault);
 | 
			
		||||
    sappend('v',"SX",effectSpeedDefault);
 | 
			
		||||
    sappend('v',"IX",effectIntensityDefault);
 | 
			
		||||
    sappend('v',"FP",effectPaletteDefault);
 | 
			
		||||
    sappend('c',"GB",useGammaCorrectionBri);
 | 
			
		||||
    sappend('c',"GC",useGammaCorrectionRGB);
 | 
			
		||||
    sappend('c',"TF",fadeTransition);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -85,6 +85,8 @@ void handleSettingsSet(byte subPage)
 | 
			
		|||
      briS = bri;
 | 
			
		||||
      effectDefault = effectCurrent;
 | 
			
		||||
      effectSpeedDefault = effectSpeed;
 | 
			
		||||
      effectIntensityDefault = effectIntensity;
 | 
			
		||||
      effectPaletteDefault = effectPalette;
 | 
			
		||||
    } else {
 | 
			
		||||
      if (server.hasArg("CR"))
 | 
			
		||||
      {
 | 
			
		||||
| 
						 | 
				
			
			@ -146,6 +148,11 @@ void handleSettingsSet(byte subPage)
 | 
			
		|||
        int i = server.arg("IX").toInt();
 | 
			
		||||
        if (i >= 0 && i <= 255) effectIntensityDefault = i;
 | 
			
		||||
      }
 | 
			
		||||
      if (server.hasArg("FP"))
 | 
			
		||||
      {
 | 
			
		||||
        int i = server.arg("FP").toInt();
 | 
			
		||||
        if (i >= 0 && i <= 255) effectPaletteDefault = i;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    saveCurrPresetCycConf = server.hasArg("PC");
 | 
			
		||||
    turnOnAtBoot = server.hasArg("BO");
 | 
			
		||||
| 
						 | 
				
			
			@ -527,6 +534,16 @@ bool handleSet(String req)
 | 
			
		|||
        effectUpdated = true;
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
   //set effect palette (only for FastLED effects)
 | 
			
		||||
   pos = req.indexOf("FP=");
 | 
			
		||||
   if (pos > 0) {
 | 
			
		||||
      if (effectPalette != req.substring(pos + 3).toInt())
 | 
			
		||||
      {
 | 
			
		||||
        effectPalette = req.substring(pos + 3).toInt();
 | 
			
		||||
        strip.setPalette(effectPalette);
 | 
			
		||||
        effectUpdated = true;
 | 
			
		||||
      }
 | 
			
		||||
   }
 | 
			
		||||
 | 
			
		||||
   //set hue polling light: 0 -off
 | 
			
		||||
   pos = req.indexOf("HP=");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -98,11 +98,11 @@ void wledInit()
 | 
			
		|||
  });
 | 
			
		||||
 | 
			
		||||
  server.on("/generate_204", HTTP_GET, [](){
 | 
			
		||||
    serveIndexOrWelcome();
 | 
			
		||||
    serveIndex();
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  server.on("/fwlink", HTTP_GET, [](){
 | 
			
		||||
    serveIndexOrWelcome();
 | 
			
		||||
    serveIndex();
 | 
			
		||||
  });
 | 
			
		||||
  
 | 
			
		||||
  server.on("/sliders", HTTP_GET, serveIndex);
 | 
			
		||||
| 
						 | 
				
			
			@ -189,7 +189,7 @@ void wledInit()
 | 
			
		|||
  //if OTA is allowed
 | 
			
		||||
  if (!otaLock){
 | 
			
		||||
    server.on("/edit", HTTP_GET, [](){
 | 
			
		||||
    if(!handleFileRead("/edit.htm")) server.send(200, "text/html", PAGE_edit);
 | 
			
		||||
    server.send(200, "text/html", PAGE_edit);
 | 
			
		||||
    });
 | 
			
		||||
    #ifdef USEFS
 | 
			
		||||
    server.on("/edit", HTTP_PUT, handleFileCreate);
 | 
			
		||||
| 
						 | 
				
			
			@ -395,13 +395,9 @@ void buildCssColorString()
 | 
			
		|||
void serveIndexOrWelcome()
 | 
			
		||||
{
 | 
			
		||||
  if (!showWelcomePage){
 | 
			
		||||
    if(!handleFileRead("/index.htm")) {
 | 
			
		||||
      serveIndex();
 | 
			
		||||
    }
 | 
			
		||||
    serveIndex();
 | 
			
		||||
  }else{
 | 
			
		||||
    if(!handleFileRead("/welcome.htm")) {
 | 
			
		||||
      serveSettings(255);
 | 
			
		||||
    }
 | 
			
		||||
    serveSettings(255);
 | 
			
		||||
    showWelcomePage = false;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -31,7 +31,7 @@ void notify(byte callMode, bool followUp=false)
 | 
			
		|||
  udpOut[8] = effectCurrent;
 | 
			
		||||
  udpOut[9] = effectSpeed;
 | 
			
		||||
  udpOut[10] = white;
 | 
			
		||||
  udpOut[11] = 4; //compatibilityVersionByte: 0: old 1: supports white 2: supports secondary color 3: supports FX intensity, 24 byte packet 4: supports transitionDelay
 | 
			
		||||
  udpOut[11] = 5; //compatibilityVersionByte: 0: old 1: supports white 2: supports secondary color 3: supports FX intensity, 24 byte packet 4: supports transitionDelay 5: sup palette
 | 
			
		||||
  udpOut[12] = colSec[0];
 | 
			
		||||
  udpOut[13] = colSec[1];
 | 
			
		||||
  udpOut[14] = colSec[2];
 | 
			
		||||
| 
						 | 
				
			
			@ -39,6 +39,7 @@ void notify(byte callMode, bool followUp=false)
 | 
			
		|||
  udpOut[16] = effectIntensity;
 | 
			
		||||
  udpOut[17] = (transitionDelay >> 0) & 0xFF;
 | 
			
		||||
  udpOut[18] = (transitionDelay >> 8) & 0xFF;
 | 
			
		||||
  udpOut[19] = effectPalette;
 | 
			
		||||
  
 | 
			
		||||
  IPAddress broadcastIp;
 | 
			
		||||
  broadcastIp = ~WiFi.subnetMask() | WiFi.gatewayIP();
 | 
			
		||||
| 
						 | 
				
			
			@ -170,6 +171,11 @@ void handleNotifications()
 | 
			
		|||
        {
 | 
			
		||||
          transitionDelayTemp = ((udpIn[17] << 0) & 0xFF) + ((udpIn[18] << 8) & 0xFF00);
 | 
			
		||||
        }
 | 
			
		||||
        if (udpIn[11] > 4 && udpIn[19] != effectPalette && receiveNotificationEffects)
 | 
			
		||||
        {
 | 
			
		||||
          effectPalette = udpIn[19];
 | 
			
		||||
          strip.setPalette(effectPalette);
 | 
			
		||||
        }
 | 
			
		||||
        nightlightActive = udpIn[6];
 | 
			
		||||
        if (!nightlightActive)
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -112,6 +112,7 @@ void colorUpdated(int callMode)
 | 
			
		|||
      briOld = briT;
 | 
			
		||||
      tperLast = 0;
 | 
			
		||||
    }
 | 
			
		||||
    strip.setTransitionMode(true);
 | 
			
		||||
    transitionActive = true;
 | 
			
		||||
    transitionStartTime = millis();
 | 
			
		||||
  } else
 | 
			
		||||
| 
						 | 
				
			
			@ -129,6 +130,7 @@ void handleTransitions()
 | 
			
		|||
    float tper = (millis() - transitionStartTime)/(float)transitionDelayTemp;
 | 
			
		||||
    if (tper >= 1.0)
 | 
			
		||||
    {
 | 
			
		||||
      strip.setTransitionMode(false);
 | 
			
		||||
      transitionActive = false;
 | 
			
		||||
      tperLast = 0;
 | 
			
		||||
      setLedsStandard();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Ładowanie…
	
		Reference in New Issue