diff --git a/main/ledstrip.cpp b/main/ledstrip.cpp index 6de2b05..30bed4b 100644 --- a/main/ledstrip.cpp +++ b/main/ledstrip.cpp @@ -21,6 +21,8 @@ float gLedPosition = 0; // yes, this is intendet as a float value! Do NOT change bool brakeLightsStatus; +espchrono::millis_clock::time_point brakeLightTimer; + uint16_t blinkAnimation = LEDSTRIP_OVERWRITE_NONE; namespace { @@ -152,8 +154,13 @@ void updateLedStrip() avgPwm /= 4; // avgAccel in m/s/s - if (avgPwm < -1.f || (avgAccel < -0.001f && avgSpeedKmh > 5.f)) + if (avgPwm < -1.f || (avgAccel < -0.001f && avgSpeedKmh > 5.f) || espchrono::ago(brakeLightTimer) < 200ms) { + if (!(espchrono::ago(brakeLightTimer) < 200ms)) + { + brakeLightTimer = espchrono::millis_clock::now(); + } + auto color = avgSpeedKmh < -0.1f ? CRGB{255, 255, 255} : CRGB{255, 0, 0}; brakeLightsStatus = true; diff --git a/main/ledstrip.h b/main/ledstrip.h index f9f7691..9f75e27 100644 --- a/main/ledstrip.h +++ b/main/ledstrip.h @@ -4,6 +4,7 @@ #include // 3rdparty lib includes +#include #include // local includes @@ -46,6 +47,8 @@ extern uint16_t blinkAnimation; extern bool brakeLightsStatus; +extern espchrono::millis_clock::time_point brakeLightTimer; + void showDefaultLedstrip(); void showAnimation(); void showBetterRainbow(); diff --git a/main/utils.cpp b/main/utils.cpp index 28ecb37..b6e00fb 100644 --- a/main/utils.cpp +++ b/main/utils.cpp @@ -265,7 +265,7 @@ void updateAccumulators() // ESP_LOGI("utils.cpp", "m_s2: %f", m_s2); - avgAccel = m_s2; + avgAccel = avgAccel * 0.3f + m_s2 * 0.7f; lastAvgSpeedKmh = avgSpeedKmh; lastAvgSpeedKmhTs = espchrono::millis_clock::now();