#include <FastLED.h>
#define LED_PIN 6 // Pin, an dem die LED-Leiste angeschlossen ist
#define LED_COUNT 10 // Anzahl der LEDs in der Leiste
#define BRIGHTNESS 255 // Maximal Helligkeit
#define LED_TYPE WS2812 // LED-Typ
#define COLOR_ORDER GRB // Farb-Reihenfolge
#define EFFECT_DURATION 30000 // 30 Sekunden pro Effekt
CRGB leds[LED_COUNT]; // Array für die LEDs
unsigned long effectStartTime = 0; // Startzeit des aktuellen Effekts
int currentEffect = 0; // Aktueller Effekt
void setup() {
FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, LED_COUNT).setCorrection(TypicalLEDStrip);
FastLED.setBrightness(BRIGHTNESS);
effectStartTime = millis(); // Setze Startzeit des ersten Effekts
}
void loop() {
// Überprüfe, ob die Zeit für den aktuellen Effekt abgelaufen ist
if (millis() - effectStartTime > EFFECT_DURATION) {
currentEffect = (currentEffect + 1) % 10; // Wechsle zum nächsten Effekt (0 bis 9)
effectStartTime = millis(); // Setze die Startzeit für den nächsten Effekt
}
// Effekte basierend auf dem aktuellen Effekt ausführen
switch (currentEffect) {
case 0: rainbow(); break;
case 1: wave(); break;
case 2: knightRider(); break;
case 3: flash(); break;
case 4: breathing(); break;
case 5: randomBlink(); break;
case 6: colorChange(); break;
case 7: fireEffect(); break;
case 8: runningColors(); break;
case 9: meteorRain(); break;
}
}
// Effekt 1: Regenbogen
/*void rainbow() {
for (int j = 0; j < 256; j++) {
for (int i = 0; i < LED_COUNT; i++) {
leds[i] = CHSV((i + j) % 255, 255, 255);
}
FastLED.show();
delay(20);
}
}*/
void rainbow() {
uint8_t baseHue = 0; // Начальный цветовой тон
for (int j = 0; j < 256; j++) {
for (int i = 0; i < LED_COUNT; i++) {
leds[i] = CHSV(baseHue + (i * 10), 255, 255); // Увеличиваем Hue на 10 для каждого светодиода
}
FastLED.show();
delay(20);
baseHue++; // Увеличиваем общий цветовой тон для движения радуги
}
}
// Effekt 2: Wellen
void wave() {
for (int i = 0; i < LED_COUNT; i++) {
leds[i] = CHSV(160, 255, sin8(i * 20 + millis() / 10));
}
FastLED.show();
delay(30);
}
// Effekt 3: Knight Rider
void knightRider() {
static int position = 0;
static int direction = 1;
leds[position] = CRGB::Red;
FastLED.show();
delay(50);
leds[position] = CRGB::Black;
position += direction;
if (position == LED_COUNT - 1 || position == 0) {
direction = -direction;
}
}
// Effekt 4: Blitzlicht
void flash() {
fill_solid(leds, LED_COUNT, CRGB::White);
FastLED.show();
delay(100);
fill_solid(leds, LED_COUNT, CRGB::Black);
FastLED.show();
delay(500);
}
// Effekt 5: Farbatmung
void breathing() {
static uint8_t brightness = 0;
static int8_t direction = 1;
brightness += direction;
if (brightness == 255 || brightness == 0) {
direction = -direction;
}
fill_solid(leds, LED_COUNT, CHSV(0, 255, brightness));
FastLED.show();
delay(30);
}
// Effekt 6: Zufälliges Blinken
void randomBlink() {
int randomLED = random(LED_COUNT);
leds[randomLED] = CHSV(random(255), 255, 255);
FastLED.show();
delay(200);
leds[randomLED] = CRGB::Black;
}
// Effekt 7: Farbwechsel
void colorChange() {
static uint8_t hue = 0;
hue++;
for (int i = 0; i < LED_COUNT; i++) {
leds[i] = CHSV(hue + i * 10, 255, 255);
}
FastLED.show();
delay(100);
}
// Effekt 8: Feuer
void fireEffect() {
for (int i = 0; i < LED_COUNT; i++) {
leds[i] = CHSV(0 + random8(50), 255, random8(150, 255));
}
FastLED.show();
delay(100);
}
// Effekt 9: Laufende Farben
void runningColors() {
static uint8_t startHue = 0;
startHue++;
for (int i = 0; i < LED_COUNT; i++) {
leds[i] = CHSV(startHue + i * 10, 255, 255);
}
FastLED.show();
delay(100);
}
// Effekt 10: Meteorregen
void meteorRain() {
static int pos = 0;
pos = (pos + 1) % LED_COUNT;
fadeToBlackBy(leds, LED_COUNT, 40);
leds[pos] = CRGB::Blue;
FastLED.show();
delay(100);
}