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