2017-10-05 135 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循環。添加休息;在您呼叫下一個()