Почему это зацикливание?
Я пытаюсь сделать что-то очень простое. Я хочу, чтобы светодиод погас от полной яркости до выключенного. Это работает... Однако светодиод снова загорается на полную яркость и снова гаснет в цикле. Я не уверен, почему. Я думаю, что упускаю что-то очевидное. Как только 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);
}
}
@Keltari, 👍3
Обсуждение1 ответ
Лучший ответ:
Эта строка:
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
- Проблема с датчиком температуры и влажности DHT11
- Получение ошибки ets 8 января 2013,rst cause:4,boot mode(1,6) wdt reset
- Выводы прерываний Arduino Mega 2560 и отображение портов с помощью поворотного энкодера
- Данные DHT11 из Arduino UNO в Firebase через ESP8266
- Объяснение кода MPU6050
- Измерение скорости двигателя постоянного тока с помощью поворотного энкодера
- Почему dtostrf() не работает для этого значения?
- Как я могу прервать задержку() при нажатии кнопки?
legThreeBrightness = 255
делает не то, что вы думаете. Включите предупреждения вашего компилятора и обратите внимание на то, что он говорит., @Mooing Duck