2016-02-13 95 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