Arduino-WS (7)

#include <FastLED.h>

const int LEDPin = 4;
const int NPixels = 18; // LED Streifen Länge
CRGB leds[NPixels];

typedef struct
{ uint8_t ex;  // existiert
  uint8_t r,g,b;
  float pos, tempo;
} Lichtpunkt;

int        Lichtpunkte = 0;
const int  MaxLichtpunkte = 6;
Lichtpunkt lichter[MaxLichtpunkte];

void setup()
{ for (int i=0; i<MaxLichtpunkte; i++)
  { lichter[i].ex = 0;
  }
  FastLED.addLeds<NEOPIXEL, LEDPin>(leds, NPixels);
}

void loop()
{ 
  if (random(30)==1)
  { for (int i=0; i<MaxLichtpunkte; i++)
    { if (!(lichter[i].ex))
      { lichter[i].ex = 1;
      
        lichter[i].r = random(128);
        lichter[i].g = random(128);
        lichter[i].b = random(128);
        
        int w = random(3);
        lichter[i].r += (w==0 ?127 :0);
        lichter[i].g += (w==1 ?127 :0);
        lichter[i].b += (w==2 ?127 :0);
        
        lichter[i].pos = 0.0; // start oben
        lichter[i].tempo = 0.0;
        break;
      }
    } 
  }

  for (int i=0; i<NPixels; i++)  // LED Steifen alles schwarz
  { leds[i].r = 0;
    leds[i].g = 0;
    leds[i].b = 0;
    leds[i].setRGB(0,0,0);
  }
  for (int i=0; i<MaxLichtpunkte; i++) // i+=1  i=i+1
  { if (lichter[i].ex)
    { int pos = (int)(lichter[i].pos);
      if (pos<0 || pos>=NPixels) continue; // ausserhalb => nix tun
      leds[ pos ].setRGB
      ( lichter[i].r,
        lichter[i].g,
        lichter[i].b
      );
      
      lichter[i].pos += lichter[i].tempo;
      // lichter[i].pos = lichter[i].pos + lichter[i].tempo;      
      if (lichter[i].pos >= NPixels)
      { lichter[i].ex = 0;
      }

      lichter[i].tempo += 0.01;
    }
  }
  FastLED.show();
  delay(10);
}