Entspannung 25min mit Aufwachphase, Auto-Start, Pin D10 GPIO18

This commit is contained in:
Clawdia
2026-08-12 10:41:21 +02:00
parent e1a0846312
commit eea6fb7130
+25 -10
View File
@@ -26,21 +26,21 @@ typedef struct {
} preset_t;
static const preset_t presets[] = {
// Optimiertes 25-Minuten-Entspannungsprogramm basierend auf Brainwave Entrainment Forschung
// Phase 1: Einstieg / Orientierung - Alpha hoch für sanftes Einschwingen
{"Entspannung Einstieg", 12, 5, 15},
// Phase 2: Alpha-Entspannung - 10 Hz ist am besten erforscht für Entspannung & Kreativität
{"Alpha Entspannung", 10, 7, 0},
// Phase 3: Tiefe Entspannung - Theta nähern, warmes Orange-Rot
{"Tiefe Entspannung", 8, 8, 20},
// Phase 4: Integration / Abschwung - tiefer Alpha/Theta Übergang
{"Integration", 6, 5, 10}
// 25-Minuten-Entspannungsprogramm mit absteigender Frequenz und Aufwachphase
// Alpha -> Theta -> sanfter Aufweck-Anstieg für sicheren Abschluss
{"Einschwingen", 12, 3, 15},
{"Alpha Entspannung", 10, 5, 0},
{"Alpha/Theta Übergang", 8, 6, 20},
{"Theta Entspannung", 6, 6, 10},
{"Tiefe Theta", 4, 3, 5},
{"Aufwachen", 10, 2, 30}
};
#define PRESET_COUNT (sizeof(presets)/sizeof(presets[0]))
static int current_preset = -1;
static bool led_on = false;
static uint64_t last_toggle_ms = 0;
static uint64_t phase_start_ms = 0;
static void hsv2rgb(uint32_t h, uint32_t s, uint32_t v, uint32_t *r, uint32_t *g, uint32_t *b) {
h %= 360;
@@ -82,7 +82,8 @@ static void apply_preset(int idx){
set_all_pixels(r,g,b);
led_on = true;
last_toggle_ms = esp_timer_get_time()/1000;
ESP_LOGI(TAG, "Preset %d %s %dHz", idx, p->name, p->freq_hz);
phase_start_ms = esp_timer_get_time()/1000;
ESP_LOGI(TAG, "Preset %d %s %dHz %dmin", idx, p->name, p->freq_hz, p->duration_min);
}
static void stop_leds(void){
@@ -144,6 +145,10 @@ void app_main(void){
memset(led_pixels,0,sizeof(led_pixels));
flush_leds();
// Auto-Start des 25-Minuten Entspannungsprogramms beim Einschalten
apply_preset(0);
ESP_LOGI(TAG,"Auto-Start: Relaxation Programm gestartet (Pin D10/GPIO18)");
char line_buf[64];
int line_pos=0;
@@ -182,6 +187,16 @@ void app_main(void){
}
flush_leds();
}
// Auto-weiter zur nächsten Phase nach Ablauf der Dauer
uint64_t elapsed_ms = now - phase_start_ms;
if(elapsed_ms >= (uint64_t)p->duration_min * 60 * 1000){
if(current_preset + 1 < PRESET_COUNT){
apply_preset(current_preset + 1);
}else{
stop_leds();
ESP_LOGI(TAG,"25-Minuten Programm beendet");
}
}
}
vTaskDelay(pdMS_TO_TICKS(5));
}