Files
led_entspannung/led_entspannung.ino

87 lines
2.7 KiB
Arduino
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* led_entspannung.ino
* LED-Entspannungsablauf für XIAO ESP32-C6 + 30x WS2812B
*
* Pin: D10 (GPIO18) wie im "Standard-Code" getestet und bestätigt
* Ablauf (auto-Start beim Einschalten):
* 1) Ankommen / Beta→Alpha 10 Hz 60 s (255, 80, 0)
* 2) Alpha-Entspannung 8 Hz 90 s (255, 40, 0)
* 3) Theta-Eintauchen 5 Hz 90 s (200, 0, 0)
* 4) Delta-Regeneration 2 Hz 120 s (180, 0, 0)
* 5) Delta-Tiefschlaf 1 Hz 120 s (150, 0, 0)
* 6) Theta-Aufstieg 4 Hz 90 s (220, 30, 0)
* 7) Alpha-Weckphase 7 Hz 90 s (255, 60, 0)
* Danach: alle LEDs aus, 3 s Pause, dann von vorn.
*
* Arduino-IDE:
* - Board: "Seeed XIAO ESP32C6"
* - Port: COMx (bzw. /dev/ttyACM0)
* - Bibliothek "Adafruit NeoPixel" muss installiert sein
* - Upload → fertig, es startet automatisch
*/
#include <Adafruit_NeoPixel.h>
#define LED_PIN 18 // D10
#define NUM_LEDS 30
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);
struct Phase {
uint8_t r, g, b;
uint32_t freq_hz;
uint32_t duration_s;
const char *name;
};
static const Phase phases[] = {
{ 255, 80, 0, 10, 60, "Ankommen / Beta-Alpha" },
{ 255, 40, 0, 8, 90, "Alpha-Entspannung" },
{ 200, 0, 0, 5, 90, "Theta-Eintauchen" },
{ 180, 0, 0, 2, 120, "Delta-Regeneration" },
{ 150, 0, 0, 1, 120, "Delta-Tiefschlaf" },
{ 220, 30, 0, 4, 90, "Theta-Aufstieg" },
{ 255, 60, 0, 7, 90, "Alpha-Weckphase" },
};
#define NUM_PHASES (sizeof(phases) / sizeof(phases[0]))
void setup() {
Serial.begin(115200);
delay(500);
Serial.println("==== LED-Entspannungsablauf (7 Phasen) ====");
Serial.printf("XIAO ESP32-C6 | D10 (GPIO%d) | %d LEDs\n", LED_PIN, NUM_LEDS);
strip.begin();
strip.setBrightness(255);
strip.show(); // alles aus
Serial.println("Strip initialisiert, Start in 1 s ...");
delay(1000);
}
void loop() {
for (int p = 0; p < NUM_PHASES; p++) {
const Phase &ph = phases[p];
Serial.printf("Phase %d/%d: %s %d Hz %d s (%d,%d,%d)\n",
p + 1, NUM_PHASES, ph.name, ph.freq_hz, ph.duration_s, ph.r, ph.g, ph.b);
uint32_t start = millis();
while (millis() - start < ph.duration_s * 1000UL) {
uint32_t half_ms = (1000UL / ph.freq_hz) / 2; // 50 % ein / 50 % aus
for (int i = 0; i < NUM_LEDS; i++) strip.setPixelColor(i, ph.r, ph.g, ph.b);
strip.show();
delay(half_ms);
strip.clear();
strip.show();
delay(half_ms);
}
}
// Kurze Pause zwischen Durchläufen
Serial.println("Durchlauf beendet - 3 s Pause, dann neu");
strip.clear();
strip.show();
delay(3000);
}