2017-10-05 15 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

それから点滅しません。 Delayは、LEDの点灯時間を設定するのに使用されます。 –

答えて

0

ボタンを押してもforループが終了します。 next()の呼び出しを終了すると、そのループに戻ります。休憩を追加する。