Почему светодиоды не затухают постепенно?

Рейтинг: 3Ответов: 1Опубликовано: 11.02.2023

Хочу сделать так, чтобы после того как, светодиоды постепенно набрали максимальную мощность, также постепенно затухали, вроде код написан так как нужно, но почему то не работает так, как было задумано, светодиоды постепенно набирют максимум мощности и просто продолжают гореть.

int lightdiods = 0;
void setup()
{
  pinMode(6, OUTPUT);
}

void loop()
{
  
  
  if (lightdiods != 255){
     lightdiods = (lightdiods + 5);
     analogWrite(6, lightdiods);
    delay(100);}
  else if (lightdiods == 255){
    lightdiods = (lightdiods - 5);
    analogWrite(6, lightdiods);
    
    
  
  }

введите сюда описание изображения

Ответы

▲ 4

Как только значение достигнет 255, оно уменьшится на 5, а на следующей итерации, которая начнется даже без задержки, значение снова увеличится на 5. Вместо этого надо было добавить переменную-инкремент и менять у нее знак при достижении крайнего положения:

int lightdiods{0};
int increment{5};

void loop()
{
    lightdiods += increment;
    if ((0 == lightdiods) or (255 == lightdiods))
    {
        increment *= -1;
    }
    analogWrite(6, lightdiods);
    delay(100);
}