Почему я не могу сразу выключить светодиод с помощью этого скетча?

Я надеюсь, что светодиод через какое-то время погаснет. Кроме того, я надеюсь, что смогу сразу же выключить светодиод, когда он затухнет, но я могу только погаснуть.

const int buttonPin = 2;
const int ledPin = 9;
const int fadingDelay = 20000; 
int buttonState = 0;
boolean fadingState = false;
void setup() {


// инициализируем вывод светодиода как выход:
  pinMode(ledPin, OUTPUT);
  // инициализируем вывод кнопки как вход:
  pinMode(buttonPin, INPUT);
}
void loop() {
  // читаем состояние значения кнопки:
  buttonState = digitalRead(buttonPin);

  // проверяем, была ли нажата кнопка
  if (buttonState == HIGH) {
    buttonState = LOW;
    // проверяем текущий статус светодиода (вкл/выкл)
    if (fadingState == false) {
      // включаем светодиод
        for (int i = 255; i >= 0; i -= 5) {
          if (buttonState == HIGH && fadingState == true) { 
          analogWrite(ledPin, 0); //немедленно выключаем
          i=-1;
          }  
        analogWrite(ledPin, i);
             delay(fadingDelay);   

    }    
    fadingState = false;  // сохраняем текущее состояние светодиода (вкл/выкл)
  }
}
}

, 👍0

Обсуждение

см. пример BlinkWithouDelay. теперь ваш эскиз останавливается на 20 секунд., @Juraj

Ваш код беспорядок и не будет работать должным образом. Вам необходимо четко определить, *что* вы хотите делать, прежде чем мы сможем вам помочь., @Duncan C


1 ответ


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

0

Я нигде не вижу места, где вы назначаете fadingState как true. Я не могу понять эту часть

if (fadingState == false) {
      // включаем светодиод
        for (int i = 255; i >= 0; i -= 5) {
          if (buttonState == HIGH && fadingState == true) { 
          analogWrite(ledPin, 0); //немедленно выключаем
          i=-1;
          }  
    analogWrite(ledPin, i);
    delay(fadingDelay);   
    }

Если вы вводите условие if с оператором fadingState как false. Затем в цикле for у вас есть if условие, в котором оператор имеет значение fadingState == true. Если да, то входя как Ложь, тогда почему вы ищете Истинное Состояние.

Затем, если вам удастся отсортировать это, добавьте break; в это условие if, чтобы, когда светодиод погаснет, вы выйдете из этого цикла for .

И здесь вы устанавливаете состояние кнопки как низкое buttonState = LOW, если сначала условие If, затем в этом вложенном if без чтения buttonState вы все еще ищете его как HIGH.

,