2016-03-22 8 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); 
    } 

Wir machen einen „Advanced Stop-Light“, so Im Code muss ich es so hinzufügen, wenn Sie die Taste jederzeit drücken, um die Ende des Zyklus wird es den Code dafür ausführen, Wie würde ich das tun?Make-Taste halten, variabel und am Ende des Zyklus Laufcode

Ich habe ein paar Dinge ausprobiert, aber jedes Mal, wenn es nicht funktioniert, Was wäre eine einfache Lösung dafür?

Antwort

0

Haben Sie versucht, eine Flagge zu setzen, wenn die Taste gedrückt wird, und dann am Ende der Schleife zu prüfen, ob die Flagge gesetzt wurde.

Wenn das Flag gesetzt ist, wissen Sie, dass die Taste gedrückt wurde, damit Sie den Code ausführen können. Etwas wie das.

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 
     } 
    } 

Alles was Sie brauchen oben hinzuzufügen, wenn Ihr Button-Set = true Button gedrückt wird

+0

Ich habe das versucht, weil, wenn die Taste zu irgendeinem Zeitpunkt gedrückt wird, bevor es es nicht registrieren wird, – Kyle1264

0

Wenn ich richtig verstehe, wollen Sie den gesamten Zyklus unabhängig davon laufen, ob die Taste gedrückt wird, dann gibt die Sonder Code, der ausgeführt wird (oder nicht), abhängig davon, ob die Taste während des Zyklus gedrückt wurde.

Wenn ja, könnten Sie eine Funktion my_delay (msec) schreiben und sie innerhalb des Zyklus statt der Verzögerung aufrufen. innerhalb my_delay, würden Sie eine Schleife, die wiederholt, wenn die Taste gedrückt prüft wird, bis die gewünschte Zeit vergangen ist:

static int lpressed = 0 ; 

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

Dann am Ende des Zyklus würde man einfach Test (und wahrscheinlich Reset) die Variable lpressed und handeln Sie entsprechend:

Verwandte Themen