Почему это зацикливание?

Я пытаюсь сделать что-то очень простое. Я хочу, чтобы светодиод погас от полной яркости до выключенного. Это работает... Однако светодиод снова загорается на полную яркость и снова гаснет в цикле. Я не уверен, почему. Я думаю, что упускаю что-то очевидное. Как только legThreeBrightness уменьшится до 0, ничего не должно произойти...

int legThreeBrightness = 255;

void setup() {

    pinMode(3, OUTPUT);

}  

void loop() {  
  
    if (legThreeBrightness = 255){
        do {
              analogWrite(3, legThreeBrightness);
              delay(30);
              legThreeBrightness = legThreeBrightness -5;
           } while (legThreeBrightness >= 0);
    }
}

, 👍3

Обсуждение

legThreeBrightness = 255 делает не то, что вы думаете. Включите предупреждения вашего компилятора и обратите внимание на то, что он говорит., @Mooing Duck


1 ответ


Лучший ответ:

9

Эта строка:

if (legThreeBrightness = 255){

присваивает параметру legThreeBrightness значение 255. Это не ноль, поэтому он входит в блок и запускает затухание теперь, когда для переменной установлено значение 255.

Если вы просто хотите сравнить значение с 255, используйте:

if (legThreeBrightness == 255){

и таким образом, когда функция цикла повторяется, она не возвращает значение 255. Таким образом, оно останется равным 0.

,

вздох... так и было. Я совсем забыл, что это двойное == для сравнения., @Keltari

@Keltari Ошибка новичка, мы все это сделали. Убедитесь, что вы следите за своими операторами всякий раз, когда вы отлаживаете :-), @Mast

https://en.m.wikipedia.org/wiki/Yoda_conditions, @Filip Franik

Есть также некоторые компиляторы, которые предупредят вас об этом. Если вы подсчитаете время, которое вы потратили на отладку этого, возможно, было бы лучше выяснить, может ли ваш компилятор и как., @JonathanZ supports MonicaC

@Keltari, если хотите, вы можете последовать предложению @JonathanZsupportsMonicaC, чтобы включить предупреждения компилятора. Перейдите в «Файл» -> «Настройки» -> «Предупреждения компилятора» и установите «Дополнительно». Если вы хотите, чтобы компиляция завершилась ошибкой, а не просто выдавалось предупреждение, добавьте #pragma GCC диагностическая ошибка "-Wparentheses" в начало вашей программы., @lights0123