2017-10-17 11 views
0

3つのボタンの組み合わせによってLEDが一定時間点灯するコードがあります。"for"ループ中にボタンの組み合わせでLEDをオフにする

私の問題は、いったん組み合わせが始まると、LEDをオフにすることができないということです。私が3つのボタンをすべて押すと、どれだけの時間が経過してもLEDは消灯すると仮定します。私によると、LEDは、ボタン1が押された場合、その後、オフ24secオンしますが、すべてのボタンが押されている場合はオフにする必要があります

if (buttonState1 == HIGH){ 
     digitalWrite(ledPin4, HIGH); 
     for (int d=0; d<24;d++) 
      if (buttonState1 == HIGH && buttonState2 == HIGH && buttonState3 == HIGH){ 
       d=24; 
      } 
     delay(1000) 
    } 
    digitalWrite(ledPin4, LOW); 
} 

:ここ

は私が持つ問題を抱えている部分であります同時に残された時間に関係なく。

+0

コードによれば、LEDは1秒間だけ点灯します。 –

答えて

0

私はあなたがカールブラケット逃したと思う:だから遅延は今、forループの一部である

if (buttonState1 == HIGH){ 
    digitalWrite(ledPin4, HIGH); 
    for (int d=0; d<24;d++){  // Missed bracket here 
     if (buttonState1 == HIGH && buttonState2 == HIGH && buttonState3 == HIGH){ 
      d=24; 
     } 
     delay(1000) 
    } 
    digitalWrite(ledPin4, LOW); 
} 

を。あなたが3つのボタンを押しても消えないと言う事実は、遅延そのもののせいかもしれません。あなたは何もしていない1秒で立ち往生しているし、ミリ秒未満の何かをチェックする。あなたが私たちに見せてくれなかったdigitalReadsを持っている限り、ボタンを数秒以上押しても動作すると思います。これを避けるには、遅延の代わりにタイムスタンプを使用できます。

long startTime = 0; 

buttonState1 = digitalRead(buttonPin1); 

if(buttonState1 == HIGH){ 
    digitalWrite(ledPin4, HIGH); 
    startTime = millis(); 
    while(startTime + 24000 > millis() && startTime != 0){    
     // You have to read your buttons every loop. Might be also some problem in your code 
     buttonState1 = digitalRead(buttonPin1); 
     buttonState2 = digitalRead(buttonPin2); 
     buttonState3 = digitalRead(buttonPin3); 
     if (buttonState1 == HIGH && buttonState2 == HIGH && buttonState3 == HIGH){ 
      startTime = 0; 
      break; 
     } 
    } 
    digitalWrite(ledPin4, LOW); 

} 
関連する問題