2016-02-13 87 views
1

我想在if語句中運行for循環,但它不斷重複。當我按下引腳2上的一個按鈕時,我基本上希望引腳4閃爍6次。當for循環中z變爲6時,if語句使得z被重置爲0,並且for循環再次重新啓動。因此,引腳4上的LED持續閃爍。任何人都可以提供幫助,使其僅閃爍6次?下面是代碼:需要援助 - 如何退出if語句中的for循環?

int switchState = 0; 

void setup() 
{ 
    pinMode(4, OUTPUT); 
    pinMode(5, OUTPUT); 
    pinMode(2, INPUT); 

} 

void loop() 
{ 
    switchState = digitalRead(2); 
    if (switchState == LOW) 
    { 
    digitalWrite(5, LOW); 
    digitalWrite(4, LOW); 
    } 
    else 
    { 
    digitalWrite(5, HIGH); 
    for (int z=0; z<6; z++) 
    { 
     digitalWrite(4, HIGH); 
     delay(100); 
     digitalWrite(4, LOW); 
     delay(100); 
    } 
    } 

} 
+0

我看不到你的代碼錯誤。 loop()方法將被一次又一次地調用。每次,它都會檢查你的按鈕。如果沒有按下按鈕,引腳4和5被設置爲低電平(我認爲這將是兩個將被關閉的LED),如果按下,引腳5永久打開並且引腳4將被打開並且關閉6次,然後循環()將再次開始。 你的z沒有錯,沒有'if語句使得z被重置爲0並且for循環重新開始。 –

+1

Hey Markus, 我的目標是讓引腳4上的LED閃爍6次,然後即使按下按鈕也會停止閃爍。我想讓引腳5保持點亮,並且不得不放開按鈕,然後再次按下引腳4以再次開始閃爍6次。 – PYB

回答

2

試試這個:

void setup() 
{ 
    pinMode(4, OUTPUT); 
    pinMode(5, OUTPUT); 
    pinMode(2, INPUT); 
} 

void loop() 
{ 

    //Deactivate all leds 
    digitalWrite(5, LOW); 
    digitalWrite(4, LOW); 

    if (digitalRead(2) == HIGH) { //If the button is pressed... 
    digitalWrite(5, HIGH); 

    //blink 
    for (int z=0; z<6; z++) 
    { 
     digitalWrite(4, HIGH); 
     delay(100); 
     digitalWrite(4, LOW); 
     delay(100); 
    } 

    while (digitalRead(2) == HIGH) { // Wait until release the button 
     delay(10); 
    } 

    } 

} 
+0

是的,這很有用,非常感謝Arton! 我沒有意識到這實際上是我退出for循環時需要的一個暫停。 – PYB