From c8e13366c66deef677cabc5878bee123d7e73da0 Mon Sep 17 00:00:00 2001 From: David Friedland Date: Sun, 21 Feb 2021 10:07:38 -0800 Subject: [PATCH] animate PWM dimmer brightness LEDs during transitions and with variable brightness --- tasmota/xdrv_04_light.ino | 10 ++++------ tasmota/xdrv_35_pwm_dimmer.ino | 5 +++-- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/tasmota/xdrv_04_light.ino b/tasmota/xdrv_04_light.ino index f60a6bdbd..1d78df359 100644 --- a/tasmota/xdrv_04_light.ino +++ b/tasmota/xdrv_04_light.ino @@ -505,9 +505,6 @@ class LightStateClass { uint8_t prev_bri = _briRGB; _briRGB = bri_rgb; if (bri_rgb > 0) { addRGBMode(); } -#ifdef USE_PWM_DIMMER - if (PWM_DIMMER == TasmotaGlobal.module_type) PWMDimmerSetBrightnessLeds(-1); -#endif // USE_PWM_DIMMER return prev_bri; } @@ -516,9 +513,6 @@ class LightStateClass { uint8_t prev_bri = _briCT; _briCT = bri_ct; if (bri_ct > 0) { addCTMode(); } -#ifdef USE_PWM_DIMMER - if (PWM_DIMMER == TasmotaGlobal.module_type) PWMDimmerSetBrightnessLeds(-1); -#endif // USE_PWM_DIMMER return prev_bri; } @@ -1958,6 +1952,10 @@ void LightSetOutputs(const uint16_t *cur_col_10) { if (!Settings.flag4.zerocross_dimmer) { analogWrite(Pin(GPIO_PWM1, i), bitRead(TasmotaGlobal.pwm_inverted, i) ? Settings.pwm_range - cur_col : cur_col); } +#ifdef USE_PWM_DIMMER + // Animate brightness LEDs to follow PWM dimmer brightness + if (PWM_DIMMER == TasmotaGlobal.module_type) PWMDimmerSetBrightnessLeds(change10to8(cur_col)); +#endif // USE_PWM_DIMMER } } } diff --git a/tasmota/xdrv_35_pwm_dimmer.ino b/tasmota/xdrv_35_pwm_dimmer.ino index d86082f19..555ec1a67 100644 --- a/tasmota/xdrv_35_pwm_dimmer.ino +++ b/tasmota/xdrv_35_pwm_dimmer.ino @@ -167,6 +167,7 @@ void PWMDimmerSetBrightnessLeds(int32_t bri) uint32_t level = 0; led = -1; mask = 0; + uint16_t pwm_led_bri = 0; for (uint32_t count = 0; count < leds; count++) { level += step; for (;;) { @@ -175,7 +176,8 @@ void PWMDimmerSetBrightnessLeds(int32_t bri) if (!mask) mask = 1; if (Settings.ledmask & mask) break; } - SetLedPowerIdx(led, bri >= level); + pwm_led_bri = changeUIntScale((bri > level ? bri - level : 0), 0, step, 0, Settings.pwm_range); + analogWrite(Pin(GPIO_LED1, led), bitRead(TasmotaGlobal.led_inverted, led) ? Settings.pwm_range - pwm_led_bri : pwm_led_bri); } } } @@ -193,7 +195,6 @@ void PWMDimmerSetPoweredOffLed(void) void PWMDimmerSetPower(void) { DigitalWrite(GPIO_REL1, 0, bitRead(TasmotaGlobal.rel_inverted, 0) ? !TasmotaGlobal.power : TasmotaGlobal.power); - PWMDimmerSetBrightnessLeds(-1); PWMDimmerSetPoweredOffLed(); }