diff --git a/src/main.c b/src/main.c index 5489ab9..24e93dc 100644 --- a/src/main.c +++ b/src/main.c @@ -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)); }