2016-03-22 9 views
0
void setup() { 

    for (int i = 0; i < pinCount; thisPin++) { 
    pinMode(ledPins[thisPin], OUTPUT); 
    } 
} 

void loop() {  
     digitalWrite(1,HIGH); 
     digitalWrite(7,HIGH); 
     digitalWrite(11,HIGH); 
     delay(10000); 
     digitalWrite(1, LOW); 
     digitalWrite(2, HIGH); 
     digitalWrite(3, LOW); 
     delay(2500); 
     digitalWrite(1,LOW); 
     digitalWrite(2,LOW); 
     digitalWrite(3,HIGH); 
     digitalWrite(7,LOW); 
     digitalWrite(4,HIGH); 
     digitalWrite(5,HIGH); 
     delay(5000); 
     digitalWrite(4,LOW); 
     digitalWrite(9,HIGH); 
     digitalWrite(11,LOW); 
     delay(10000); 
     digitalWrite(5, LOW); 
     digitalWrite(6, HIGH); 
     delay(2500); 
     digitalWrite(6, LOW); 
     digitalWrite(7, HIGH); 
     digitalWrite(8, HIGH); 
     delay(5000); 
     digitalWrite(8, LOW); 
     digitalWrite(9, LOW); 
     digitalWrite(10, HIGH); 
     delay(2500); 
     digitalWrite(10, LOW); 
     digitalWrite(11, HIGH); 
     digitalWrite(3, LOW); 
    } 

の終わりに私たちは、私はボタンはいつでも押されたときにそれを追加する必要があるコードではそう 、「高度なストップライト」を作っていますサイクルの終わりに、そのコードを実行します。どうすればいいでしょうか?メイクボタンホールド変数とサイクルの実行コード

私はいくつかのことを試しましたが、それがうまくいかないたびに、これに簡単な解決策はありますか?

答えて

0

ボタンを押したときにフラグを設定して、フラグが設定されている場合はループの最後にチェックしましたか?

フラグが設定されていると、コードを実行できるようにボタンがプッシュされていることがわかります。このようなもの。

boolean buttonPressed = false; 

void setup() {  
    for (int i = 0; i < pinCount; thisPin++) { 
    pinMode(ledPins[thisPin], OUTPUT); 
    } 
} 

void loop() {  
     digitalWrite(1,HIGH); 
     digitalWrite(7,HIGH); 
     digitalWrite(11,HIGH); 
     delay(10000); 
     digitalWrite(1, LOW); 
     digitalWrite(2, HIGH); 
     digitalWrite(3, LOW); 
     delay(2500); 
     digitalWrite(1,LOW); 
     digitalWrite(2,LOW); 
     digitalWrite(3,HIGH); 
     digitalWrite(7,LOW); 
     digitalWrite(4,HIGH); 
     digitalWrite(5,HIGH); 
     delay(5000); 
     digitalWrite(4,LOW); 
     digitalWrite(9,HIGH); 
     digitalWrite(11,LOW); 
     delay(10000); 
     digitalWrite(5, LOW); 
     digitalWrite(6, HIGH); 
     delay(2500); 
     digitalWrite(6, LOW); 
     digitalWrite(7, HIGH); 
     digitalWrite(8, HIGH); 
     delay(5000); 
     digitalWrite(8, LOW); 
     digitalWrite(9, LOW); 
     digitalWrite(10, HIGH); 
     delay(2500); 
     digitalWrite(10, LOW); 
     digitalWrite(11, HIGH); 
     digitalWrite(3, LOW); 
     if(buttonPressed) 
     { 
      //code goes here 
     } 
    } 

あなたはボタンが押されたときにセットが=のbuttonPressedされる上記追加する必要があるすべての真

+0

私はこれを試しました。なぜなら、ボタンを押す前にいつでもそれを登録しないと、 – Kyle1264

0

私が正しく理解していれば、あなたは全体のサイクルがTHENにかかわらず、ボタンが押されているかどうかの特別な実行したいですサイクル中にボタンが押されたかどうかに応じて実行する(またはしない)コード。

もしそうなら、関数my_delay(msec)を記述し、遅延の代わりにサイクルの中で呼び出すことができます。変数はlpressedと

static int lpressed = 0 ; 

void my_repeat(int msec) 
{ 
    long start = millis() ; 
    for(; millis()-start < msec;) 
    { 
     if (digitalRead(button_pin)==PRESSED) 
     lpressed = 1 ; 
    } 
} 

その後のサイクルの終わりに、あなたは、単にテスト(そしておそらくリセット)になります。my_delayの内側に、あなたは要求された時間が経過するまでボタンが押された繰り返しかどうかをテストループを持っているでしょうそれに応じて行動してください:

void loop() 
{ 
    // your unconditional code goes here 
    if (lpressed) 
    { 
     lpressed = 0 ; // reset so we can check again in next cycle 
     // your conditional code goes here 
    } 
} 
関連する問題