From 14c90bc9ad2fed16d065729051d8c99679b77239 Mon Sep 17 00:00:00 2001 From: Eric Duminil <eric.duminil@gmail.com> Date: Thu, 15 Apr 2021 14:29:09 +0200 Subject: [PATCH] LED Effects : small breathe refactor. --- ampel-firmware/co2_sensor.cpp | 1 - ampel-firmware/led_effects.cpp | 28 ++++++++++++++++------------ ampel-firmware/led_effects.h | 1 - 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/ampel-firmware/co2_sensor.cpp b/ampel-firmware/co2_sensor.cpp index 1ac7f9b..20878af 100644 --- a/ampel-firmware/co2_sensor.cpp +++ b/ampel-firmware/co2_sensor.cpp @@ -138,7 +138,6 @@ namespace sensor { */ if (co2 < 2000) { led_effects::displayCO2color(co2); - led_effects::breathe(co2); delay(100); } else { // >= 2000: entire ring blinks red diff --git a/ampel-firmware/led_effects.cpp b/ampel-firmware/led_effects.cpp index 4f84b3b..c2909e6 100644 --- a/ampel-firmware/led_effects.cpp +++ b/ampel-firmware/led_effects.cpp @@ -129,6 +129,19 @@ namespace led_effects { } } + /** + * If enabled, slowly varies the brightness between MAX_BRIGHTNESS & MIN_BRIGHTNESS. + */ + void breathe(int16_t co2) { + static uint8_t breathing_offset = 0; + uint16_t brightness = config::min_brightness + + pixels.sine8(breathing_offset) * config::brightness_amplitude / 255; + pixels.setBrightness(brightness); + pixels.show(); + breathing_offset += co2 > 1600 ? 6 : 3; // breathing speed. +3 looks like slow human breathing. + } + + /** * Fills the whole ring with green, yellow, orange or black, depending on co2 input and CO2_TICKS. */ @@ -142,6 +155,9 @@ namespace led_effects { pixels.setPixelColor(ledId, pixels.ColorHSV(LED_HUES[ledId], 255, brightness)); } pixels.show(); + if (config::brightness_amplitude > 0){ + breathe(co2); + } } void showRainbowWheel(uint16_t duration_ms, uint16_t hue_increment) { @@ -177,18 +193,6 @@ namespace led_effects { } } - void breathe(int16_t co2) { - if (config::night_mode || config::brightness_amplitude == 0) { - return; - } - static uint16_t breathing_offset = 0; - uint16_t brightness = config::min_brightness - + pixels.sine8(breathing_offset) * config::brightness_amplitude / 255; - pixels.setBrightness(brightness); - pixels.show(); - breathing_offset += co2 > 1600 ? 6 : 3; // breathing speed. +3 looks like slow human breathing. - } - /** * Displays a complete blue circle, and starts removing LEDs one by one. Returns the number of remaining LEDs. * Can be used for calibration, e.g. when countdown is 0. Does not work in night mode. diff --git a/ampel-firmware/led_effects.h b/ampel-firmware/led_effects.h index d34a9bf..3deb809 100644 --- a/ampel-firmware/led_effects.h +++ b/ampel-firmware/led_effects.h @@ -25,7 +25,6 @@ namespace led_effects { void setupRing(); void redAlert(); - void breathe(int16_t co2); int countdownToZero(); void showWaitingLED(uint32_t color); void showKITTWheel(uint32_t color, uint16_t duration_s = 2); -- GitLab