#include <Adafruit_NeoPixel.h>
const int PIN = 5; // Pin, an dem das ledFeld angeschlossen ist
const int ANZAHL_LEDS = 64; // Anzahl der LEDs vom ledFeld
Adafruit_NeoPixel ledFeld(ANZAHL_LEDS, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
ledFeld.begin();
}
void loop() {
// Animiere Lichter von links nach rechts mit bewegter weißer Farbe
for (int i = 0; i < ANZAHL_LEDS; i++) {
// Setze die aktuelle LED auf Rot
ledFeld.setPixelColor(i, ledFeld.Color(255, 0, 0));
// Lösche die vorherigen LEDs (grün)
vorherigeLEDsLoeschen(i);
// Setze mehr rote LEDs
zusaetzlicheRoteLEDsSetzen(i);
// Setze die bewegte weiße Farbe
bewegteWeisseLEDSetzen(i);
// Zeige die Änderungen
ledFeld.show();
// Kurze Verzögerung für die Animation
delay(100);
}
// Lösche die letzten LEDs (grün)
letzteGrueneLEDsLoeschen();
ledFeld.show();
}
// Funktion zum Löschen der vorherigen LEDs (grün)
void vorherigeLEDsLoeschen(int aktuellerIndex) {
for (int j = 1; j <= 3; j++) {
if (aktuellerIndex >= j) {
ledFeld.setPixelColor(aktuellerIndex - j, ledFeld.Color(0, 255, 0));
}
}
}
// Funktion zum Setzen von zusätzlichen roten LEDs
void zusaetzlicheRoteLEDsSetzen(int aktuellerIndex) {
for (int k = 1; k <= 3; k++) {
int rotePosition = (aktuellerIndex + k) % ANZAHL_LEDS;
ledFeld.setPixelColor(rotePosition, ledFeld.Color(255, 0, 0));
}
}
// Funktion zum Setzen der bewegten weißen LED
void bewegteWeisseLEDSetzen(int aktuellerIndex) {
int weissePosition = (aktuellerIndex + millis() / 200) % ANZAHL_LEDS;
ledFeld.setPixelColor(weissePosition, ledFeld.Color(255, 255, 255));
}
// Funktion zum Löschen der letzten LEDs (grün)
void letzteGrueneLEDsLoeschen() {
for (int i = ANZAHL_LEDS - 1; i > ANZAHL_LEDS - 4; i--) {
ledFeld.setPixelColor(i, ledFeld.Color(0, 255, 0));
}
}