• Как сделать плавное изменение яркости ШИМ?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    хочется чтобы лента плавно изменяла яркость

    для этого нужно менять скважность ШИМ не один раз скачком от текущего значения к целевому, а постепенно, за несколько шагов. С постоянной скоростью -- примерно так:
    void set_pwm_smooth(int new_pwm)
    {
        static const int pwm_step = ...; // шаг изменения ШИМ
        static const int pwm_step_time = ...; // время одного шага изменения ШИМ
        static int old_pwm;
        int pwm = old_pwm;
    
        while (pwm != new_pwm) {
            int next_pwm = pwm + (pwm < new_pwm ? pwm_step : -pwm_step);
            if ((pwm < new_pwm && next_pwm > new_pwm) ||
                (pwm > new_pwm && next_pwm < new_pwm))
                pwm = new_pwm;
            else
                pwm = next_pwm;
            analogWrite(LEDPIN, pwm);
            delay(pwm_step_time);
        }
        old_pwm = new_pwm;
    }
    Ответ написан