Программа для альтернативного мигания 2 светодиодов, используя индикатор включения-выключения, кнопка в качестве переключателя

here is my code

когда я нажимаю кнопку, она начинает работать, но если я нажму ее снова, она не остановится

вот мой код

int ledState=0;
int ledPin1=11;
int ledPin2=12;
int buttonPin=2;
int buttonStateNew;
int buttonStateOld=1;


void setup() 
{  
    pinMode(ledPin1,OUTPUT);
    pinMode(ledPin2,OUTPUT);
    pinMode(buttonPin,INPUT);
}

void loop() 
{
  buttonStateNew= digitalRead(buttonPin);

  if(buttonStateOld == 0 && buttonStateNew == 1)
  {
      if (ledState==0){
         digitalWrite(ledPin1,HIGH);
         digitalWrite(ledPin2,LOW);
         delay(1000);
         digitalWrite(ledPin2,HIGH);
         digitalWrite(ledPin1,LOW);
         delay(1000);
         ledState=1;
      }
      else
      { 
         digitalWrite(ledPin1,LOW);
         digitalWrite(ledPin2,LOW);
         ledState=0;
      }
   }
   buttonStateOld=buttonStateNew;
}

, 👍-1

Обсуждение

начните с примера BlinkWithoutDelay, @Juraj

Стоило бы сделать шаг назад и критически подумать о том, что происходит в вашем коде. Подумайте, что происходит, когда "val == ВЫСОКИЙ" - состояние порта когда-либо считывается снова?, @Dave Newton

@SAJISHVAR в чем твой вопрос?, @jsotola

@jsotola схема с 2 светодиодами и кнопкой, когда я нажимаю кнопку, первые 2 светодиода должны поочередно мигать, а при моем 2-м нажатии на кнопку светодиоды должны остановиться, @SAJISHVAR

@SAJISHVAR это описание желаемого поведения программы ... это не вопрос ... пример вопроса: "как мне отладить программу?", @jsotola

@jsotola, Когда я пытался запустить код, последовательность мигания светодиода должна была быть в цикле до нажатия следующей кнопки, но когда я попытался сделать это в виде цикла, кнопка "выкл." не работает, @SAJISHVAR

Я изменил отступ, чтобы соответствовать логике. Похоже, что код мигания кнопки может возникать только при нажатии кнопки, потому что он находится внутри условного нажатия кнопки " если ()"., @Dave X


1 ответ


0

Я думаю, у вас есть спорный вопрос. В той части, которая выключает светодиоды, добавьте задержку (скажем, 200 мс). В противном случае, если переключатель отскочит несколько раз, он будет зарегистрирован как несколько нажатий.

,