#include <FastLED.h>
// Definiáld a LED-szalagot
#define DATA_PIN 6 // A szalag pinje
#define NUM_LEDS 55 // A szalagban lévő LED-ek száma
// Létrehozzuk a LED tömböt
CRGB leds[NUM_LEDS];
// Változók az effektekhez
uint8_t currentEffect = 0; // Jelenlegi effektus indexe
unsigned long lastSwitchTime = 0; // Utolsó effektusváltás ideje
const unsigned long effectDuration = 5000; // Effektusidő (ms)
void setup() {
// Kezdőbeállítások
FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS); // Szalag inicializálása
FastLED.setBrightness(255); // Max fényerő (energiásabb effektus)
}
void loop() {
// Ellenőrizzük, hogy eléri-e az effektus az időhatárt
if (millis() - lastSwitchTime > effectDuration) {
currentEffect++; // Váltunk a következő effektusra
if (currentEffect > 2) currentEffect = 0; // Vissza nullára ha túlmegyünk
lastSwitchTime = millis(); // Frissítjük az utolsó váltás idejét
}
// Futtatjuk az aktuális effektust
switch (currentEffect) {
case 0:
colorCycleScannerEffect();
break;
case 1:
colorCycleStrobeEffect();
break;
case 2:
colorCycleFillAndChaseEffect();
break;
}
}
// Effektus 1: Color Cycle Scanner Effect
void colorCycleScannerEffect() {
static uint8_t position = 0; // Világítás pozíciója
static uint8_t direction = 1; // Mozgásirány (+1 vagy -1)
// Töröljük a korábbi állapotot
fill_solid(leds, NUM_LEDS, CRGB::Black);
// Kék, piros, fehér ciklus a szalagon
for (int i = 0; i < NUM_LEDS; i++) {
uint8_t brightness = 255 - abs(i - position) * 10; // Csorogó fényerő
if (brightness > 0) {
leds[i] = selectColor(map(i, 0, NUM_LEDS, 0, 255), brightness); // Színváltás
}
}
// Frissítjük a LED-eket
FastLED.show();
// Várakozás
delay(20);
// Frissítjük a pozíciót
position += direction;
// Forduljon vissza, ha eléri a szélét a szalagnak
if (position >= NUM_LEDS || position < 0) {
direction = -direction; // Fordítjuk az irányt
}
}
// Effektus 2: Color Cycle Strobe Effect
void colorCycleStrobeEffect() {
static uint8_t strobeCounter = 0; // Stroboszkópos hatás számlálója
// Töröljük a korábbi állapotot
fill_solid(leds, NUM_LEDS, CRGB::Black);
// Stroboszkópos fény
if (strobeCounter % 2 == 0) {
fill_solid(leds, NUM_LEDS, selectColor(strobeCounter * 10, 255)); // Kék, piros, fehér ciklus
}
// Frissítjük a LED-eket
FastLED.show();
// Várakozás
delay(50);
// Növeljük a stroboszkópos számlálót
strobeCounter++;
}
// Effektus 3: Color Cycle Fill and Chase Effect
void colorCycleFillAndChaseEffect() {
static uint8_t position = 0; // Világítás pozíciója
static uint8_t direction = 1; // Mozgásirány (+1 vagy -1)
// Töröljük a korábbi állapotot
fill_solid(leds, NUM_LEDS, CRGB::Black);
// Kék, piros, fehér ciklus a szalagon
for (int i = 0; i <= position; i++) {
leds[i] = selectColor(map(i, 0, NUM_LEDS, 0, 255), 255); // Színváltás
}
// Frissítjük a LED-eket
FastLED.show();
// Várakozás
delay(30);
// Frissítjük a pozíciót
position += direction;
// Forduljon vissza, ha eléri a szélét a szalagnak
if (position >= NUM_LEDS || position < 0) {
direction = -direction; // Fordítjuk az irányt
}
}
// Segédfüggvény: Kék, piros, fehér színváltás
CRGB selectColor(uint8_t hue, uint8_t brightness) {
if (hue < 85) {
return CHSV(HUE_BLUE, 255, brightness); // Kék
} else if (hue < 170) {
return CHSV(HUE_RED, 255, brightness); // Piros
} else {
return CRGB::White; // Fehér
}
}