@KirillSPB777

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

Привет! управляю яркостью ленты через MQTT по примерам сделал все гуд но хочется чтобы лента плавно изменяла яркость, добавляя delay(FADESPEED); как в RGB примерах не получается :(
String strPayload = String((char*)payload);  //считываем значение топика
    int val = strPayload.toInt(); //конвертируем для шим
    int stled = map(val, 0, 100, 0, 255); //приводим значение 0-100 в значение 255-0
    analogWrite(LEDPIN, stled); //устанавливаем уровень шим сигнала
    //delay(FADESPEED);
  • Вопрос задан
  • 163 просмотра
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
http://dilbert.com/strip/1998-08-24
хочется чтобы лента плавно изменяла яркость

для этого нужно менять скважность ШИМ не один раз скачком от текущего значения к целевому, а постепенно, за несколько шагов. С постоянной скоростью -- примерно так:
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;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы