2017-10-17 15 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

난 당신이 웅크 리고 브래킷을 놓친 생각 :

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); 

}