2015-07-19 205 views
1

我創建了這個項目,當我按下並按住按鈕時,它會閃爍我的麪包板上的三個LED。這個問題一旦我將其按下一次,即使我放開按鈕,LED也不會停止閃爍。我很確定問題在於程序只讀取一次按鈕狀態,然後繼續執行程序的其餘部分。有沒有辦法每十分之一秒更新一次按鈕?或者如果有其他解決方法,請隨時回覆。這裏是我的代碼(不是最漂亮的,我知道):簡單的Arduino按鈕LED代碼

//Assigns button to digital pin 4 
int buttonPin = 4; 

void setup() { 
//sets pins 1-3 as output pins 
for (int ledPin= 1; ledPin <= 3; ledPin++) { 
     pinMode(ledPin, OUTPUT); 
} 
//sets the button pin as a button 
pinMode(buttonPin, INPUT_PULLUP); 
} 

void loop() { 
    //puts button state into variable "button" 
    int button = digitalRead(buttonPin); 
    //while button is pushed, blink leds in order 
    while (button == LOW) { 
    for (int ledPin = 1; ledPin <= 3; ledPin++) { 
     digitalWrite(ledPin, HIGH); 
     delay(500); 
     digitalWrite(ledPin, LOW); 
    } 
    } 
    //while button is not pushed, turn off leds 
    while (button == HIGH) { 
    for (int ledPin = 1; ledPin <= 3; ledPin++) { 
    digitalWrite(ledPin, LOW); 
    } 
} 
} 

回答

0

的問題是如你所說,你只是在你的循環的開始讀取按鈕狀態則進入而不能退出,因爲button永遠不會再更新。由於loop()功能Arduino的運行(setup()後,當然)運行長,您可以更新您的代碼如下所示:

void loop() { 
    //puts button state into variable "button" 
    int button = digitalRead(buttonPin); 
    //if button is pushed, blink leds in order 
    if (button == LOW) { 
    for (int ledPin = 1; ledPin <= 3; ledPin++) { 
     digitalWrite(ledPin, HIGH); 
     delay(500); 
     digitalWrite(ledPin, LOW); 
    } 
    }else if (button == HIGH) { //if button is not pushed, turn off leds 
    for (int ledPin = 1; ledPin <= 3; ledPin++) { 
     digitalWrite(ledPin, LOW); 
    } 
    } 
} 

這將完成的是檢查按鈕的狀態,那麼如果它是按下閃爍的LED,否則全部關閉。您不需要while循環,因爲loop()會在完成後立即重新運行,因此您將持續響應您的操作。再而

button = digitalRead(buttonPin); 
if(button == HIGH) break; 

什麼,將要做的是檢查按鈕:或者,如果你想要讓這個閃光周期內釋放按鈕停止它,你可以像這樣添加一些東西到第一個for循環指示燈閃爍,如果按鈕被釋放,它將退出for循環。話雖如此,由於你在那裏延遲,它可能會錯過你釋放,然後重新按下按鈕,如果這發生在500毫秒的延遲。

希望能幫到你!

+0

非常感謝!這真的幫了我。我不敢相信我無法自己找出那一個哈哈! –