Entspannung 25min mit Aufwachphase, Auto-Start, Pin D10 GPIO18
This commit is contained in:
+25
-10
@@ -26,21 +26,21 @@ typedef struct {
|
|||||||
} preset_t;
|
} preset_t;
|
||||||
|
|
||||||
static const preset_t presets[] = {
|
static const preset_t presets[] = {
|
||||||
// Optimiertes 25-Minuten-Entspannungsprogramm basierend auf Brainwave Entrainment Forschung
|
// 25-Minuten-Entspannungsprogramm mit absteigender Frequenz und Aufwachphase
|
||||||
// Phase 1: Einstieg / Orientierung - Alpha hoch für sanftes Einschwingen
|
// Alpha -> Theta -> sanfter Aufweck-Anstieg für sicheren Abschluss
|
||||||
{"Entspannung Einstieg", 12, 5, 15},
|
{"Einschwingen", 12, 3, 15},
|
||||||
// Phase 2: Alpha-Entspannung - 10 Hz ist am besten erforscht für Entspannung & Kreativität
|
{"Alpha Entspannung", 10, 5, 0},
|
||||||
{"Alpha Entspannung", 10, 7, 0},
|
{"Alpha/Theta Übergang", 8, 6, 20},
|
||||||
// Phase 3: Tiefe Entspannung - Theta nähern, warmes Orange-Rot
|
{"Theta Entspannung", 6, 6, 10},
|
||||||
{"Tiefe Entspannung", 8, 8, 20},
|
{"Tiefe Theta", 4, 3, 5},
|
||||||
// Phase 4: Integration / Abschwung - tiefer Alpha/Theta Übergang
|
{"Aufwachen", 10, 2, 30}
|
||||||
{"Integration", 6, 5, 10}
|
|
||||||
};
|
};
|
||||||
#define PRESET_COUNT (sizeof(presets)/sizeof(presets[0]))
|
#define PRESET_COUNT (sizeof(presets)/sizeof(presets[0]))
|
||||||
|
|
||||||
static int current_preset = -1;
|
static int current_preset = -1;
|
||||||
static bool led_on = false;
|
static bool led_on = false;
|
||||||
static uint64_t last_toggle_ms = 0;
|
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) {
|
static void hsv2rgb(uint32_t h, uint32_t s, uint32_t v, uint32_t *r, uint32_t *g, uint32_t *b) {
|
||||||
h %= 360;
|
h %= 360;
|
||||||
@@ -82,7 +82,8 @@ static void apply_preset(int idx){
|
|||||||
set_all_pixels(r,g,b);
|
set_all_pixels(r,g,b);
|
||||||
led_on = true;
|
led_on = true;
|
||||||
last_toggle_ms = esp_timer_get_time()/1000;
|
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){
|
static void stop_leds(void){
|
||||||
@@ -144,6 +145,10 @@ void app_main(void){
|
|||||||
memset(led_pixels,0,sizeof(led_pixels));
|
memset(led_pixels,0,sizeof(led_pixels));
|
||||||
flush_leds();
|
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];
|
char line_buf[64];
|
||||||
int line_pos=0;
|
int line_pos=0;
|
||||||
|
|
||||||
@@ -182,6 +187,16 @@ void app_main(void){
|
|||||||
}
|
}
|
||||||
flush_leds();
|
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));
|
vTaskDelay(pdMS_TO_TICKS(5));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user