1. Der Betrieb von Leuchtdioden 

1.1 Eine Led auf dem MEGA-Board blinken lassen

Verwendetes Material:
1x Arduino MEGA Platine

Dazu auf der Elegoo-CD bzw. im PDF die Seite "Lektion 2 Blinken" finden.
Hier wird auf einfachster Weise die interne gelbe/grüne/rote Led auf dem MEGA-Board durch   
einen simplen Programmcode zum Blinken gebracht.
Einfach den Programmschritten laut Anleitung folgen.
Wichtig: Laut Anleitung das MEGA-Board auswählen am richtigen COM-Port!
 
Der Programmcode:
void setup() { 

// Es wird ein digitaler pin mit Namen "LED_BUILTIN" als output generiert 
// es ist die interne Led auf dem MEGA-Board
pinMode(LED_BUILTIN, OUTPUT); 

void loop() { 

  digitalWrite(LED_BUILTIN, HIGH);  //schaltet die LED on 

  delay(1000);                      // wartet 1000ms 

  digitalWrite(LED_BUILTIN, LOW);   // schaltet die LED off 

  delay(1000);                      //  wartet 1000ms 

}

Durch Laden Programms auf das MEGA-Board sollte nun eine grüne Led im 2-Sekundentakt blinken.

Die Led schneller oder langsamer blinken lassen
Durch Variation des xxx Wertes beim Delay(xxx); wird die Zeit geändert.

z.B. 50ms on, 950ms off ergibt einen kurzen Stroboskop-Blitzer. 

1.2 Eine Led auf dem Bread-Board blinken lassen

Verwendetes Material:
1x Arduino MEGA Platine
1x Breadboard
1x Led5mm rot oder andere Farbe
1x Widerstand 220-470 Ohm
1x langer schwarzer Draht (GND)
1x langer Draht

Auf dem Foto unten wird eine rote Led mit Vorwiderstand 330Ohm aus dem Kit verwendet. der Vorwiderstand wird mit der Anode der Led verbunden und auf PIN 7 des MEGAs gehängt. Die Kathode der Led auf GND.
 Mit folgendem Code sollte die Led blinken:
 
 Der Programmcode:
#define LED 7    // Eine Variable Led an Pin 7
 void setup() {
 // initialisiere digital pin LED als output.
 pinMode(LED , OUTPUT);
 }
 void loop() {
   digitalWrite(LED , HIGH);//Led ON
   delay(500);                       // 500ms warten
   digitalWrite(LED , LOW);// LED Off
   delay(500);                       // 500ms warten 

}

Durch Laden Programms auf das MEGA-Board sollte nun die rote Led auf dem Bread-Board im Sekundentakt blinken.

1.3 Leds immer ohne delay() betreiben 

->"Blink without delay"

Ein großes Problem beim Verwenden des Befehls delay() ist die Wartezeit. Das Programm wartet tatsächlich z.B. 1000ms bis es in die nächste Programmzeile springt.
Damit werden Programme langsam und es wäre so nie eine schnelle Kommunikation z.B. mit einem Modul oder Display möglich.

Mit dem Programm "Blink without delay" werden diese lästigen Wartezeiten vernichtet.
Ich verwende als Quelle:
https://www.arduino.cc/en/Tutorial/BuiltInExamples/BlinkWithoutDelay

Die Schaltung bleibt die gleiche!
Hier der Programmcode:
const int ledPin = 7;  // wieder Pin 7 als Led
int ledState = LOW;  // ledState für das Setzen der LED
unsigned long previousMillis = 0;  // setzt die Variable  previousMillis auf 0 zum starten

const long Interval = 100;  // Blinkzeit
void setup() {
pinMode(ledPin, OUTPUT);  //Setzt Ledpin als Output
}
void loop() {
   unsigned long currentMillis = millis();
   if (currentMillis - previousMillis >= Interval) {
        previousMillis = currentMillis;
        if (ledState == LOW) {
      ledState = HIGH;
    } else {
      ledState = LOW;    //Led geht aus und An
    }
       digitalWrite(ledPin, ledState); 
// Mit digitalWrite wird der Ledstatus auf den Pin 7
// rausgeschrieben. damit geht Pin 7 an und aus
  }
}


Damit sollte die Led wieder blinken, aber ohne delay(). Durch Variieren der Zahl "Interval" wird die Led schneller oder langsamer blinken.

1.31 Die pulsierende Led

Mittels eines kurzen Codes kann man eine Led pulsieren lassen - z.B. für Statusanzeigen.
Es bleibt der Aufbau mit einer Led auf Pin 7.

Hier der Programmcode:
const int LED = 7;

float Interval = 0.0005;  // Blinkzeit

void setup()

{

  }

void loop()

{

  float in, out;

    for (in = 0; in < 6.283; in = in + Interval)

  {

    out = sin(in) * 127.5 + 127.5;

    analogWrite(LED,out);

  }

}

Mit diesem Code sollte nun die Led blinken wie im Bild unten (Farbe kann beliebig geändert werden!

1.4 Ein RGB-Farbenspiel mit 3 fix programmierten Farben

Verwendetes Material:
1x Arduino MEGA Platine
1x Breadboard
1x Led5mm RGB COMMON CATHODE
3x Widerstand 220-470 Ohm
1x langer schwarzer Draht
3x kurzer Draht

Bitte im PDF Lektion 4 RGB Led finden.
Mit der im Kit enthaltenen RGB Led mit COMMON GND lässt sich eine RGB-Led realisieren. Mit dem folgenden Programmcode wird ein Farbwechsel erzeugt.
Wichtig: Am Foto ist ein rotes, grünes und blaues Kabel angeschlossen.
Das rote Kabel an Pin 7, das grüne an Pin 8 und das blaue an Pin 9.
Durch richtiges Einstecken der Led wird jede Farbe richtig angesteuert.
Die abgeflachte Seite der Led zeigt zum roten Kabel.
Mit dem folgenden Code startet das Farbenspiel.

Hier der Programmcode - als Beispiel mit 3 verschiedenen Farben:
const int PIN_RED   = 7;

const int PIN_GREEN = 8;

const int PIN_BLUE  = 9;

void setup() {

  pinMode(PIN_RED,   OUTPUT);

  pinMode(PIN_GREEN, OUTPUT);

  pinMode(PIN_BLUE,  OUTPUT);

}

void loop() {

  // color code #00C9CC (R = 0,   G = 201, B = 204)

  analogWrite(PIN_RED,   120);

  analogWrite(PIN_GREEN, 100);

  analogWrite(PIN_BLUE,  0); //Gelb

  delay(1000); // Farbe bleibt 1 Sekunde

  // color code #F7788A (R = 247, G = 120, B = 138)

  analogWrite(PIN_RED,   50);

  analogWrite(PIN_GREEN, 150);

  analogWrite(PIN_BLUE,  80); //Türkis

  delay(1000); // Farbe bleibt 1 Sekunde

  // color code #34A853 (R = 52,  G = 168, B = 83)

  analogWrite(PIN_RED,   100);

  analogWrite(PIN_GREEN, 0);

  analogWrite(PIN_BLUE,  100); //Pink

  delay(1000); // Farbe bleibt 1 Sekunde


1x pro Sekunde wird nun zwischen 3 Farben gewechselt.
Im Foto unten sieht man den Aufbau und die 3 Farben.

1.5 Ein RGB-Farbenspiel mit endlosem automatischen 

Farbwechsel

Mit dem folgenden Programmcode programmiert man einen endlosen automatischen Farbwechsel.

Hier der Programmcode :
//Konstanten

const int rotPin = 7;     // Rote LED an Pin 10 angeschlossen

const int gruenPin = 8;    // Gruene LED an Pin 9 angeschlossen

const int blauPin = 9;    // Blaue LED an Pin 11 angeschlossen

//Variablen

byte r = 0;                     // Variable Rot für die Farbmischung

byte g = 0;                     // Variable Grün für die Farbmischung

byte b = 0;                     // Variable Blau für die Farbmischung

char farbe = 'b';               // Buchstabe für die aktuelle Farbe (Blau)

int fadePause = 8;              // Zeit für die Fadeschritte. Kleiner = schnell, größer = langsam

int halteZeit = 500;            // Zeit die zwischen den Farben pausiert wird

unsigned long fadeZeit = 0;     // Variable für das Speichern der aktuellen millis()

boolean ersterLauf = true;      // Wird benötigt um den ersten Durchlauf des Programms zu erkennen

void setup()

{

  pinMode(rotPin, OUTPUT);        // Setzt LEDPin als Ausgang

  pinMode(gruenPin, OUTPUT);      // Setzt LEDPin als Ausgang

  pinMode(blauPin, OUTPUT);       // Setzt LEDPin als Ausgang

}

void loop()

{

  // Blaue LED beim ersten Durchlauf einblenden

  if (ersterLauf == true && millis()- fadeZeit > fadePause)

  {

    // Wenn b kleiner als 255 ist...

    if (b < 255)

    {

      b++;                        // Zählt b um 1 hoch

      analogWrite(blauPin, b);    // Ausgabe von b am LED Pin

      fadeZeit  = millis();       // Aktuelle Zeit speichern

    }

         // Wenn b bei 255 angekommen UND die halteZeit vergangen ist...

    if (b == 255 && (millis()- fadeZeit) > (fadePause + halteZeit))

    {

      ersterLauf = false;       // Erster Lauf ist abgeschlossen

    }

  }

   // Wenn ersterLauf abgeschlossen ist UND fadePause vergangen ist...

  if (ersterLauf == false && millis()- fadeZeit > fadePause)

  {

    // Wechsel von Blau zu Lila 

    if (farbe == 'b')

    {

      // Wenn r kleiner als 255 ist...

      if (r < 255)

      {

        r++;                        // Zählt r um 1 hoch

        analogWrite(rotPin, r);     // Ausgabe von r am LED Pin

        fadeZeit  = millis();       // Aktuelle Zeit speichern

      }

             // Wenn r bei 255 angekommen UND die halteZeit vergangen ist...

      if (r == 255 && millis()- fadeZeit > fadePause + halteZeit)

      {

        farbe = 'l';      // Ändere Farbe auf "l" (Lila)

      }

    }

     // Wechsel von Lila zu Rot

    if (farbe == 'l')

    {

      // Wenn b größer als 0 ist...

      if (b > 0)

      {

        b--;                        // Zählt b um 1 runter

        analogWrite(blauPin, b);    // Ausgabe von b am LED Pin

        fadeZeit  = millis();       // Aktuelle Zeit speichern

      }

             // Wenn b bei 0 angekommen UND die halteZeit vergangen ist...

      if (b == 0 && millis()- fadeZeit > fadePause + halteZeit)

      {

        farbe = 'r';      // Ändere Frabe auf "r" (Rot)

      }

    }

     // Wechsel von Rot zu Gelb

    if (farbe == 'r')

    {

      // Wenn g kleiner als 255 ist...

      if (g < 255)

      {

        g++;                        // Zählt g um 1 hoch

        analogWrite(gruenPin, g);   // Ausgabe von g am LED Pin

        fadeZeit  = millis();       // Aktuelle Zeit speichern

      }

             // Wenn g bei 255 angekommen UND die halteZeit vergangen ist...

      if (g == 255 && millis()- fadeZeit > fadePause + halteZeit)

      {

        farbe = 'y';      // Ändere Farbe auf "y" (Gelb)

      }

    }

     // Wechsel von Gelb zu Gruen

    if (farbe == 'y')

    {

      // Wenn r größer als 0 ist...

      if (r > 0)

      {

        r--;                        // Zählt r um 1 runter

        analogWrite(rotPin, r);     // Ausgabe von r am LED Pin

        fadeZeit  = millis();       // Aktuelle Zeit speichern

      }

             // Wenn r bei 0 angekommen UND die halteZeit vergangen ist...

      if (r == 0 && millis()- fadeZeit > fadePause + halteZeit)

      {

        farbe = 'g';      // Ändere Farbe auf "g" (Grün)

      }

    }

     // Wechsel von Gruen zu Petrol

    if (farbe == 'g')

    {

      // Wenn b kleiner als 255 ist...

      if (b < 255)

      {

        b++;                        // Zählt b um 1 hoch

        analogWrite(blauPin, b);    // Ausgabe von b am LED Pin

        fadeZeit  = millis();       // Aktuelle Zeit speichern

      }

             // Wenn b bei 255 angekommen UND die halteZeit vergangen ist...

      if (b == 255 && millis()- fadeZeit > fadePause + halteZeit)

      {

        farbe = 'p';      // Ändere Farbe auf "p" (Petrol)

      }

    }

     // Wechsel von Petrol zu Blau

    if (farbe == 'p')

    {

      // Wenn g größer als 0 ist...

      if (g > 0)

      {

        g--;                        // Zählt g um 1 runter

        analogWrite(gruenPin, g);   // Ausgabe von g am LED Pin

        fadeZeit  = millis();       // Aktuelle Zeit speichern

      }

             // Wenn g bei 0 angekommen UND die halteZeit vergangen ist...

      if (g == 0 && millis()- fadeZeit > fadePause + halteZeit)

      {

        farbe = 'b';      // Ändere Farbe auf "b" (Blau)

      }

    }

  }

}

 
Mit diesem Code sollte nun unendlich lang die Farbe wechseln.

1.6 Ansteuerung von WS2812 RGB-Ledstreifen

Verwendetes Material:
1x Arduino MEGA Platine
1x Breadboard
1x WS2812 RGB Ledstrip (hier 20 Leds ins Serie)
1x Doppel-Tastermodul
1x langer roter Draht (+5V)
1x kurzer roter Draht (+5V) 

3x kurzer schwarzer Draht (GND)
3x kurzer Draht

WS2812-RGB Ledstreifen gibt es z.B. bei Amazon mit 1-10m Länge. Die verwendeten RGB-Leds haben einen internen Chip eingebaut. Über ein serielles Signal (Schieberegister) kann man jeder Led einzeln Farbe und Helligkeit zuspielen. So kann z.B. eine Bar-Beleuchtung oder einfach eine Signalanzeige realisiert werden.

Mit folgendem Programmcode kann mittels des 2-Tasten-Moduls aus dem Elegoo-Kit ein RGB-Ledstreifen angesteuert werden. 
Mit Taste 1 kann man verschiedene Farben durchschalten. 
Mit Taste 2 wird der RGB-Farbverlauf gestartet.

!!Achtung: Library "Adafruit_NeoPixel.h"  muss über die Arduino-IDE->Tools->Manage Libraries... gesucht und installiert werden.


Hier der Programmcode:
#include <Adafruit_NeoPixel.h>
#define BUTTON_FIXFARBE   8    // Taste zum Schalten der Fixfarbe
#define BUTTON_FARBWECHSEL   9    // Taste zum Schalten des Farbwechses
#define PIXEL_PIN    7   // Digital Pin
int numPixels = 20;   // Anzahl der verwendeten LEds
int Helligkeit = 150; //Helligkeit des Strips
int wait = 10;        //Verzögerung des Farbwechels

Adafruit_NeoPixel strip = Adafruit_NeoPixel(numPixels, PIXEL_PIN, NEO_GRB + NEO_KHZ800);

bool oldStateFIX = HIGH;
int showTypeFIX = 0;
bool oldStateRGB = HIGH;
int showTypeRGB = 0;

void setup() {
  pinMode(BUTTON_FIXFARBE, INPUT_PULLUP);
  pinMode(BUTTON_FARBWECHSEL, INPUT_PULLUP);
  strip.begin();
  strip.show(); // Initialisierung aller pixels 'off'
}

void loop() {
  // Tasterabfrage
  bool newStateFIX = digitalRead(BUTTON_FIXFARBE);
  bool newStateRGB = digitalRead(BUTTON_FARBWECHSEL);
  // Statusabfrage
  if (newStateFIX == LOW && oldStateFIX == HIGH) {
    // kurze Verzögerung gegen Tastenprellung.
    delay(20);
       newStateFIX = digitalRead(BUTTON_FIXFARBE);
    if (newStateFIX == LOW) {
      showTypeFIX++;
      if (showTypeFIX > 6)
        showTypeFIX = 0;
      startShowFIX(showTypeFIX);
    }
  }
 oldStateFIX = newStateFIX;

  if (newStateRGB == LOW && oldStateRGB == HIGH) {
        delay(20);
        newStateRGB = digitalRead(BUTTON_FARBWECHSEL);
    if (newStateRGB == LOW) {
      showTypeRGB++;
      if (showTypeRGB > 1)   //Nur zwischen 0 und 1 umschalten 
                                                  //für weitere Anzeigemodi hier hochgehen
        showTypeRGB = 0;
      startShowRGB(showTypeRGB);
    }
    }
  oldStateRGB = newStateRGB;
  }

void startShowFIX(int i) {
  switch (i) {
    case 0: colorWipe(strip.Color(255, 127, 16), 10);  //gelb
      break;
    case 1: colorWipe(strip.Color(255, 0, 0), 10);  // Rot
      break;
    case 2: colorWipe(strip.Color(0, 255, 0), 10);  // Gruen
      break;
    case 3: colorWipe(strip.Color(0, 0, 255), 10);  // Blau
      break;
    case 4: colorWipe(strip.Color(32, 253, 24), 10); // Hellgruen
      break;
    case 5: colorWipe(strip.Color(213, 0, 255), 10); // Lila
      break;
    case 6: colorWipe(strip.Color(255, 255, 255), 10); // Weiß
      break; 
  }
}

void startShowRGB(int y) {
  switch (y) {
    case 1: rainbow(20); //Farbverlauf
    break;
    case 0: rainbow(20); //Farbverlauf
    break;
  }
}

// Farbschleife
void colorWipe(uint32_t c, uint8_t wait) {
  for (uint16_t x = 0; x < strip.numPixels(); x++) {
    strip.setPixelColor(x, c);
    strip.show();
    delay(wait);
  }
}

void rainbow(uint8_t wait) {
  uint16_t x, j;
  for(j=0; j<256; j++) {
  for(x=0; x<strip.numPixels(); x++) {
  strip.setPixelColor(x, Wheel((x+j) & 255));
  }
  strip.show();
  delay(wait);
  }
}
// Die Farben werden zwischen 0 und 256 geändert.
uint32_t Wheel(byte WheelPos) {
  WheelPos = 255 - WheelPos;
  if (WheelPos < 85) {
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  }
  if (WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
  WheelPos -= 170;
  return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}



Nach dem Programmieren sollte der RGB-Streifen leuchten und über die 2 Tasten steuerbar sein.

1.7 Endloser Farbwechsel alle Leds WS2812 RGB-Ledstreifen

Verwendetes Material:
1x Arduino MEGA Platine
1x WS2812 RGB Ledstrip (hier 20 Leds ins Serie)
1x Doppel-Tastermodul
1x langer roter Draht (+5V)
1x kurzer schwarzer Draht (GND)
1x kurzer Draht

Mit dem nachfolgenden Code wird auf einfachste Weise der RGB-Ledstreifen
mit endlosem-Farbwechsel aller Leds angesteuert.

Hier der Programmcode:
#include <Adafruit_NeoPixel.h>
#define PIXEL_PIN    7   // Digital IO pin connected to the NeoPixels.
int numPixels = 20;   // number of neopixel (change this accordingly)
int Helligkeit = 150; //Helligkeit des Strips
int wait = 20;        //Verzögerung des Farbwechels

Adafruit_NeoPixel strip = Adafruit_NeoPixel(numPixels, PIXEL_PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
}

void loop() {
  uint16_t x, j;
  for(j=0; j<256; j++) {
  for(x=0; x<strip.numPixels(); x++) {
  strip.setPixelColor(x, Wheel((x+j) & 255));
  }
  strip.show();
  delay(wait);
  }
}

// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
  WheelPos = 255 - WheelPos;
  if (WheelPos < 85) {
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  }
  if (WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
  WheelPos -= 170;
  return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}

1.8 Endless Rainbow Farbdurchlauf WS2812 RGB-Ledstreifen

Mit dem nachfolgenden Code wird auf einfachste Weise der RGB-Ledstreifen
mit endlosem-Farbdurchlauf -quasi ein Regenbogen- aller Leds angesteuert.

Hier der Programmcode:
#include <FastLED.h>
#define LED_PIN     7  //Led Pin
#define NUM_LEDS    20//hier die Anzahl der Leds im Streifen einstellen
#define BRIGHTNESS  64 //maximale Helligkeit zum Stromsparen (500mA ARduino USB +5V)
#define LED_TYPE    WS2812
#define COLOR_ORDER GRB
CRGB leds[NUM_LEDS];
 
#define UPDATES_PER_SECOND 50 //hier kann die Geschwingigkeit des Farbdurchlaufs eingestellt werden
 
CRGBPalette16 currentPalette;
TBlendType    currentBlending;
 
extern CRGBPalette16 myRedWhiteBluePalette;
extern const TProgmemPalette16 myRedWhiteBluePalette_p PROGMEM;
 
void setup() {
    delay( 500 ); // power-up safety delay
    FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
    FastLED.setBrightness(  BRIGHTNESS );
    
    currentPalette = RainbowColors_p;
    currentBlending = LINEARBLEND;
}
 
void loop()
{
    currentPalette = RainbowColors_p;         
    currentBlending = LINEARBLEND;
    static uint8_t startIndex = 0;
    startIndex = startIndex + 1; /* motion speed */
    FillLEDsFromPaletteColors( startIndex);
    FastLED.show();
    FastLED.delay(1000 / UPDATES_PER_SECOND);
}
 
void FillLEDsFromPaletteColors( uint8_t colorIndex)
{
    uint8_t brightness = 255;
        for( int i = 0; i < NUM_LEDS; i++) {
        leds[i] = ColorFromPalette( currentPalette, colorIndex, brightness, currentBlending);
        colorIndex += 3;
    }
}

1.9 Knight Rider Light WS2812 RGB-Ledstreifen

Mit dem nachfolgenden Code wird auf einfachste Weise der RGB-Ledstreifen
mit dem Knight-Rider Light Abfolge angesteuert.

Als Variante 1: von links nach rechts & retour

Hier der Programmcode Variante 1:
#include <Adafruit_NeoPixel.h>
int PIN = 7;
int count = 0;
int timer = 14;   //Verzögerung
int Ledanzahl = 20;
 
Adafruit_NeoPixel strip = Adafruit_NeoPixel(Ledanzahl, PIN, NEO_GRB + NEO_KHZ800); //defines the strips properties
 
void setColor(int Pixel, int R2, int G2, int B2) {
  uint32_t color = strip.Color(R2, G2, B2); // make a color
  strip.setPixelColor(Pixel, color); //set a single pixel color
  strip.show(); //update the colors
}
void setup() {
  strip.begin(); // initialize the WS2812b strip
  strip.show(); // just make sure everything is off
}
 
void loop() {
  for (count = 0; count < Ledanzahl; count++) { setColor(count, 255, 0, 0); delay(timer); setColor(count + 1, 255, 0, 0); delay(timer); setColor(count, 0, 0, 0); delay(timer * 2); } for (count = Ledanzahl; count > 0; count--) {
    setColor(count, 255, 0, 0);
    delay(timer);
    setColor(count - 1, 255, 0, 0);
    delay(timer);
    setColor(count, 0, 0, 0);
    delay(timer * 2);
  }
}



Als Variante 2: von links und rechts symmetrisch in die Mitte und retour

Hier der Programmcode Variante 2 mit 18 Leds pro Streifen:
#include <Adafruit_NeoPixel.h>
int PIN = 7;
int count = 0;
int timer = 30;   //Verzögerung
int Ledanzahl = 18;
 
Adafruit_NeoPixel strip = Adafruit_NeoPixel(Ledanzahl, PIN, NEO_GRB + NEO_KHZ800); //defines the strips properties
 
void setColor(int Pixel, int R2, int G2, int B2) {
  uint32_t color = strip.Color(R2, G2, B2); // make a color
  strip.setPixelColor(Pixel, color); //set a single pixel color
  strip.show(); //update the colors
}
void setup() {
  strip.begin(); // initialize the WS2812b strip
  strip.show(); // just make sure everything is off
}
 
void loop() {
  setColor(0, 255, 0, 0); //Start
  setColor(17, 255, 0, 0);
  delay(timer);
  setColor(1, 255, 0, 0);
  setColor(16, 255, 0, 0);
  delay(timer);
  setColor(2, 255, 0, 0);
  setColor(15, 255, 0, 0);
  delay(timer);
  setColor(3, 255, 0, 0);
  setColor(14, 255, 0, 0);
  setColor(0, 0, 0, 0);
  setColor(17, 0, 0, 0);
  delay(timer);
  setColor(4, 255, 0, 0);
  setColor(13, 255, 0, 0);
  setColor(1, 0, 0, 0);
  setColor(16, 0, 0, 0);
  delay(timer);
  setColor(5, 255, 0, 0);
  setColor(12, 255, 0, 0);
  setColor(2, 0, 0, 0);
  setColor(15, 0, 0, 0);
  delay(timer);
  setColor(6, 255, 0, 0);
  setColor(11, 255, 0, 0);
  setColor(3, 0, 0, 0);
  setColor(14, 0, 0, 0);
  delay(timer);
  setColor(7, 255, 0, 0);
  setColor(10, 255, 0, 0);
  setColor(4, 0, 0, 0);
  setColor(13, 0, 0, 0);
  delay(timer);
  setColor(8, 255, 0, 0);  //Mitte
  setColor(9, 255, 0, 0);
  setColor(5, 0, 0, 0);
  setColor(12, 0, 0, 0);
  delay(timer);
 
  setColor(6, 0, 0, 0);
  setColor(11, 0, 0, 0);
  delay(timer);
  setColor(7, 0, 0, 0);
  setColor(10, 0, 0, 0);
  delay(timer);
  setColor(8, 0, 0, 0);
  setColor(9, 0, 0, 0);
  delay(timer*10);             //alle Leds dunkel     timer*10 bedeutet kurze Pause bei dunkel
 
  setColor(8, 255, 0, 0);
  setColor(9, 255, 0, 0);
  delay(timer);
  setColor(7, 255, 0, 0);
  setColor(10, 255, 0, 0);
  delay(timer);
  setColor(6, 255, 0, 0);
  setColor(11, 255, 0, 0);
  delay(timer);
  setColor(5, 255, 0, 0);
  setColor(12, 255, 0, 0);
  setColor(8, 0, 0, 0);
  setColor(9, 0, 0, 0);
  delay(timer);
  setColor(4, 255, 0, 0);
  setColor(13, 255, 0, 0);
  setColor(7, 0, 0, 0);
  setColor(10, 0, 0, 0);
  delay(timer);
  setColor(3, 255, 0, 0);
  setColor(14, 255, 0, 0);
  setColor(6, 0, 0, 0);
  setColor(11, 0, 0, 0);
  delay(timer);
  setColor(2, 255, 0, 0);
  setColor(15, 255, 0, 0);
  setColor(5, 0, 0, 0);
  setColor(12, 0, 0, 0);
  delay(timer);
  setColor(1, 255, 0, 0);
  setColor(16, 255, 0, 0);
  setColor(4, 0, 0, 0);
  setColor(13, 0, 0, 0);
  delay(timer);
  setColor(0, 255, 0, 0);
  setColor(17, 255, 0, 0);
  setColor(3, 0, 0, 0);
  setColor(14, 0, 0, 0);
  delay(timer);
  setColor(2, 0, 0, 0);
  setColor(15, 0, 0, 0);
  delay(timer);
  setColor(1, 0, 0, 0);
  setColor(16, 0, 0, 0);
  delay(timer);
  setColor(0, 0, 0, 0);
  setColor(17, 0, 0, 0);
  delay(timer);
  }

Hier der Programmcode Variante 2 mit 20 Leds pro Streifen:
#include <Adafruit_NeoPixel.h>
int PIN = 7;
int count = 0;
int timer = 30;   //Verzögerung
int Ledanzahl = 20;
 
Adafruit_NeoPixel strip = Adafruit_NeoPixel(Ledanzahl, PIN, NEO_GRB + NEO_KHZ800); //defines the strips properties
 
void setColor(int Pixel, int R2, int G2, int B2) {
  uint32_t color = strip.Color(R2, G2, B2); // make a color
  strip.setPixelColor(Pixel, color); //set a single pixel color
  strip.show(); //update the colors
}
void setup() {
  strip.begin(); // initialize the WS2812b strip
  strip.show(); // just make sure everything is off
}
 
void loop() {
  setColor(0, 255, 0, 0); //Start
  setColor(19, 255, 0, 0);
  delay(timer);
 
  setColor(1, 255, 0, 0);
  setColor(18, 255, 0, 0);
  delay(timer);
 
  setColor(2, 255, 0, 0);
  setColor(17, 255, 0, 0);
  delay(timer);
 
  setColor(3, 255, 0, 0);
  setColor(16, 255, 0, 0);
  setColor(0, 0, 0, 0);
  setColor(19, 0, 0, 0);
  delay(timer);
 
  setColor(4, 255, 0, 0);
  setColor(15, 255, 0, 0);
  setColor(1, 0, 0, 0);
  setColor(18, 0, 0, 0);
  delay(timer);
 
  setColor(5, 255, 0, 0);
  setColor(14, 255, 0, 0);
  setColor(2, 0, 0, 0);
  setColor(17, 0, 0, 0);
  delay(timer);
 
  setColor(6, 255, 0, 0);
  setColor(13, 255, 0, 0);
  setColor(3, 0, 0, 0);
  setColor(16, 0, 0, 0);
  delay(timer);
 
  setColor(7, 255, 0, 0);
  setColor(12, 255, 0, 0);
  setColor(4, 0, 0, 0);
  setColor(15, 0, 0, 0);
  delay(timer);
 
  setColor(8, 255, 0, 0); 
  setColor(11, 255, 0, 0);
  setColor(5, 0, 0, 0);
  setColor(14, 0, 0, 0);
  delay(timer);

  setColor(9, 255, 0, 0);      //Mitte erreicht je Seite 3 Leds treffen sich in der Mitte
  setColor(10, 255, 0, 0);
  setColor(6, 0, 0, 0);
  setColor(13, 0, 0, 0);
  delay(timer);

  //ab hier werden Leds ausgeschaltet
 
  setColor(7, 0, 0, 0);
  setColor(12, 0, 0, 0);
  delay(timer);
 
  setColor(8, 0, 0, 0);
  setColor(11, 0, 0, 0);
  delay(timer);
 
  setColor(9, 0, 0, 0);
  setColor(10, 0, 0, 0);
  delay(timer*10);             //alle Leds dunkel     timer*10 bedeutet kurze Pause bei dunkel
 
  setColor(9, 255, 0, 0);
  setColor(10, 255, 0, 0);
  delay(timer);
 
  setColor(8, 255, 0, 0);
  setColor(11, 255, 0, 0);
  delay(timer);
 
  setColor(7, 255, 0, 0);
  setColor(12, 255, 0, 0);
  delay(timer);
 
  setColor(6, 255, 0, 0);
  setColor(13, 255, 0, 0);
  setColor(9, 0, 0, 0);
  setColor(10, 0, 0, 0);
  delay(timer);
 
  setColor(5, 255, 0, 0);
  setColor(14, 255, 0, 0);
  setColor(8, 0, 0, 0);
  setColor(11, 0, 0, 0);
  delay(timer);
 
  setColor(4, 255, 0, 0);
  setColor(15, 255, 0, 0);
  setColor(7, 0, 0, 0);
  setColor(12, 0, 0, 0);
  delay(timer);
 
  setColor(3, 255, 0, 0);
  setColor(16, 255, 0, 0);
  setColor(6, 0, 0, 0);
  setColor(13, 0, 0, 0);
  delay(timer);
 
  setColor(2, 255, 0, 0);
  setColor(17, 255, 0, 0);
  setColor(5, 0, 0, 0);
  setColor(14, 0, 0, 0);
  delay(timer);
 
  setColor(1, 255, 0, 0);
  setColor(18, 255, 0, 0);
  setColor(4, 0, 0, 0);
  setColor(15, 0, 0, 0);
  delay(timer);

  setColor(0, 255, 0, 0);
  setColor(19, 255, 0, 0);
  setColor(3, 0, 0, 0);
  setColor(16, 0, 0, 0);
  delay(timer);
 
  setColor(2, 0, 0, 0);
  setColor(17, 0, 0, 0);
  delay(timer);
 
  setColor(1, 0, 0, 0);
  setColor(18, 0, 0, 0);
  delay(timer);
 
  setColor(0, 0, 0, 0);
  setColor(19, 0, 0, 0);
  delay(timer);
  }