2017-10-05 185 views
0

是否可以重写延迟以结束循环? 我想要发生的是按下按钮来结束循环。但似乎在执行next()方法之前完成循环。覆盖延迟和循环

void blink1() { 
    loop_flag = true; 
    while (loop_flag) { 
    // Loop for Lights 
    for (int x = 0; x < LED_IN; x++) { 
     btn_press = digitalRead(btn_1); 
     if (!btn_press) { 
     digitalWrite(LED_BUILTIN, HIGH); 
     next(); //loop_flag = false; is stored 
     } else { 
     digitalWrite(LED_BUILTIN, LOW); 
     digitalWrite(led[x], HIGH); 
     delay(1000); 
     digitalWrite(led[x], LOW); 
     } 
    } 
    } 
} 

void next() { 

    Serial.write("pressed next \n"); 
    flag = getFlag(flag); // Sets new Flag 
    loop_flag = false; //ends the loop flag 
    delay(100); //delay for button friendly 

} 
+0

也许在'for'循环中添加一个'loop_flag'作为'false'的检查吗?像例如'x

+0

为什么你不去除延迟呢?看起来完全是多余的。循环将结束,函数将在'loop_flag'设置后返回。 – Damon

+0

然后它不会眨眼。延迟用于设置LED保持多久的时间。 –

回答

0

即使您按下按钮,它仍然会结束for循环。一旦完成对next()的调用,它就会立即返回到for循环。添加休息;在您呼叫下一个()