animate PWM dimmer brightness LEDs during transitions and with variable brightness

This commit is contained in:
David Friedland 2021-02-21 10:07:38 -08:00
parent b2e1258e22
commit c8e13366c6
2 changed files with 7 additions and 8 deletions

View File

@ -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
}
}
}

View File

@ -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();
}