From ae17fc8d643e007b5825bc7ecd69e4fcb1f5d476 Mon Sep 17 00:00:00 2001 From: nisonya <57719832+nisonya@users.noreply.github.com> Date: Sun, 1 Mar 2026 23:34:34 +0300 Subject: [PATCH] Update hub.h MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Плавность перехода, настоящий черный, минимальный порог для переключения цвета --- firmware/AmbiSensor/hub.h | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/firmware/AmbiSensor/hub.h b/firmware/AmbiSensor/hub.h index bf8290a..d1e2cce 100644 --- a/firmware/AmbiSensor/hub.h +++ b/firmware/AmbiSensor/hub.h @@ -72,6 +72,12 @@ void hub_init() { void show_ambi() { static GHtimer tmr(45); + static bool filterInit = false; + static float filt[8][3]; + static uint8_t stable[8][3]; + const float alpha = 0.22f; + const uint8_t blackLevelThreshold = 2; // без миганий на черном + const uint8_t minColorDelta = 3; // порог для переключения цвета if (tmr) { for (uint8_t i = 0; i < 5; i++) { if (!data.led_num[i]) return; @@ -100,7 +106,31 @@ void show_ambi() { b = constrain(b, 0, 255); } - colors[i] = CRGB(r, g, b); + if (!filterInit) { + filt[i][0] = r; + filt[i][1] = g; + filt[i][2] = b; + } else { + filt[i][0] += (r - filt[i][0]) * alpha; + filt[i][1] += (g - filt[i][1]) * alpha; + filt[i][2] += (b - filt[i][2]) * alpha; + } + + uint8_t rf = (filt[i][0] < blackLevelThreshold) ? 0 : (uint8_t)filt[i][0]; + uint8_t gf = (filt[i][1] < blackLevelThreshold) ? 0 : (uint8_t)filt[i][1]; + uint8_t bf = (filt[i][2] < blackLevelThreshold) ? 0 : (uint8_t)filt[i][2]; + + if (!filterInit) { + stable[i][0] = rf; + stable[i][1] = gf; + stable[i][2] = bf; + } else { + if (abs((int)rf - (int)stable[i][0]) >= minColorDelta) stable[i][0] = rf; + if (abs((int)gf - (int)stable[i][1]) >= minColorDelta) stable[i][1] = gf; + if (abs((int)bf - (int)stable[i][2]) >= minColorDelta) stable[i][2] = bf; + } + + colors[i] = CRGB(stable[i][0], stable[i][1], stable[i][2]); } uint16_t led_to = 0;