From 5863d20be1d0595727ab722b34b8fa7b50172fd1 Mon Sep 17 00:00:00 2001 From: whowechina Date: Tue, 18 Jun 2024 11:17:03 +0800 Subject: [PATCH] Improve light brightness control --- firmware/src/light.c | 5 +++-- firmware/src/main.c | 7 +++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/firmware/src/light.c b/firmware/src/light.c index b8a9524..aaa1ad5 100644 --- a/firmware/src/light.c +++ b/firmware/src/light.c @@ -378,14 +378,15 @@ static void rainbow_control(uint32_t delta_ms) } /* non linear speed change for better visual */ - int range = rainbow.speed.to - rainbow.speed.from; int progress = fast_sqrt(rainbow.elapsed * 10000 / rainbow.smooth_ms); rainbow.speed.current = rainbow.speed.from + range * progress / 100; range = rainbow.level.to - rainbow.level.from; - progress = fast_sqrt(rainbow.elapsed * 10000 / rainbow.smooth_ms); + progress = rainbow.elapsed * 100 / rainbow.smooth_ms; rainbow.level.current = rainbow.level.from + range * progress / 100; + + printf("\nlevel: %d", rainbow.level.current); } #define RAINBOW_PITCH 37 diff --git a/firmware/src/main.c b/firmware/src/main.c index 7132ca5..edbc0f2 100644 --- a/firmware/src/main.c +++ b/firmware/src/main.c @@ -115,9 +115,12 @@ static void light_mode_update() { static bool was_cardio = true; bool cardio = !reader_is_active() && !hid_is_active(); + static uint8_t last_level; + bool level_changed = (last_level != aic_cfg->light.level_idle); - if (cardio && !was_cardio) { - light_rainbow(1, 1, aic_cfg->light.level_idle); + if (cardio && (!was_cardio || level_changed)) { + light_rainbow(1, 1000, aic_cfg->light.level_idle); + last_level = aic_cfg->light.level_idle; } was_cardio = cardio;