Problem mit Pushbutton

Hallo zusammen!
Für ein aktuelles Projekt habe ich einen Code geschrieben, welcher den Arduino auf Tasterdruck 4 LED´s blinken lässt. Leider funktioniert der Code noch nicht ganz so wie er soll. Die LED´s fangen nicht immer direkt nach Knopfdruck an zu blinken. Geht der Arduino den kompletten Code mit den Delays im If-Teil Durch obwohl das If-Statement wrong ist? Kann mir jemand einen Tipp geben wie ich den Code verändern muss damit es direkt nsach Tastendruck anfängt zu Blinken?

Hier mein Code:

int led1 = 2;
int led2 = 3;
int led3 = 4;
int led4 = 5;

int buttonPin = 6;     // the number of the pushbutton pin
int buttonState = 0;  

int x = 500;

void setup() {
  pinMode(led1, OUTPUT);  
  pinMode(led2, OUTPUT);      
  pinMode(led3, OUTPUT);      
  pinMode(led4, OUTPUT);        
  pinMode(buttonPin, INPUT);     
}
void loop(){
  buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH) {

    delay(1000);

    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    delay(x);
    digitalWrite(led1, LOW);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, LOW);
    delay(x);
    digitalWrite(led1, HIGH);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, HIGH);
    delay(x);
    digitalWrite(led1, LOW);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, LOW);
    delay(x);
    digitalWrite(led1, HIGH);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, HIGH);
    delay(x);
    //5

    digitalWrite(led1, LOW);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    delay(x);
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    delay(x);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    delay(x);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    delay(x);
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    delay(x);
    //10

    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, LOW);
    delay(x);
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    delay(x);
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, LOW);
    digitalWrite(led4, HIGH);
    delay(x);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    delay(x);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    delay(x);
    //15

    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, LOW);
    delay(x);
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, LOW);
    digitalWrite(led4, HIGH);
    delay(x);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    delay(x);
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    delay(x);
    digitalWrite(led1, LOW);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    delay(x);
    //20

    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    delay(x);
    digitalWrite(led1, HIGH);
    digitalWrite(led2, LOW);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, LOW);
    delay(x);
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    delay(x);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, LOW);
    delay(x);
    digitalWrite(led1, HIGH);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, HIGH);
    delay(x);
    //25

    digitalWrite(led1, LOW);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, LOW);
    delay(x);
    digitalWrite(led1, HIGH);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, HIGH);
    delay(x);
    digitalWrite(led1, LOW);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    delay(x);
    digitalWrite(led1, LOW);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    delay(x);
    digitalWrite(led1, HIGH);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, HIGH);
    delay(x);
    //30

    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    delay(x);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    delay(x);
    digitalWrite(led1, HIGH);
    digitalWrite(led2, LOW);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    delay(x);
    digitalWrite(led1, LOW);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    delay(x);
    digitalWrite(led1, HIGH);
    digitalWrite(led2, LOW);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, LOW);
    delay(x);
    //35

    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, LOW);
    digitalWrite(led4, HIGH);
    delay(x);
    digitalWrite(led1, LOW);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, LOW);
    digitalWrite(led4, HIGH);
    delay(x);
    digitalWrite(led1, HIGH);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    delay(x);
    digitalWrite(led1, HIGH);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, HIGH);
    delay(x);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    delay(x);
    //40

    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, HIGH);
    delay(x);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    delay(x);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, HIGH);
    delay(x);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    delay(x);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, HIGH);
    delay(x);
    //45

    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, HIGH);
    delay(x);

  }
  else{

    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
  }
}

Grüße Lutz

Hallo lutz,

kein wunder das die Leds nicht sofort erleuchten !
Du hast doch direkt nach der Abfrage ob der Button High ist ein delay(1000) eingefügt !
Das wird die lösung deines Problems sein ! :wink:

grüße
Lorenz

Hallo Lorenz,

das Delay von 1000ms ist an der Stelle bewusst eingefügt. Aber manchmal starten die LEDs erst nach dem 10. mal drücken. Kann es sein das mein Taster vll einfach nur ne macke hat?

Gruß Lutz

LutzB:
Aber manchmal starten die LEDs erst nach dem 10. mal drücken. Kann es sein das mein Taster vll einfach nur ne macke hat?

Wie ist denn der PullUp- oder PullDown-Widerstand am Button angeschlossen? Schaltung?

LutzB:
das Delay von 1000ms ist an der Stelle bewusst eingefügt. Aber manchmal starten die LEDs erst nach dem 10. mal drücken. Kann es sein das mein Taster vll einfach nur ne macke hat?

Achso, das wusste ich nicht ! Hatte mich schon gewundert...

Alles so wie folgt verbunden ?

Der pullup widerstand sollte bei 10 kohm liegen...aber steht ja auch alles im Playground !

Genau so hab ich das verschaltet. Die LED´s haben alle nen 330 Ohm Vorwiderstand bekommen.

Gruß Lutz

Also ich wüsste jetzt nicht wo der Fehler liegen könnte...ich übersehe da wahrscheinlich wieder irgendetwas kleines.
Hast du den Taster mal ausgetauscht ?
Kannst den aktuellen Taster ja auch mal mit Multimeter, falls es zur Verfügung steht, prüfen...

Definier mal "sofort loslaufen". Wann drückst Du den Button? Während das Blinken noch läuft oder wenn das Blinken fertig ist?

Solange das läuft ist der Arduino noch beschäftigt. Erst wenn er fertig ist geht er im Loop nach oben und wertet den Button wieder aus.

So ich hab das einfachste übersehen und habe dem neu gekauften Taster nicht zugetraut das er wohl kaputt ist. Danke für eure Hilfe ich hätte wahrscheinlich noch >Stundenlang in der Programmierung gesucht!
Gruß Lutz

LutzB:
So ich hab das einfachste übersehen und habe dem neu gekauften Taster nicht zugetraut das er wohl kaputt ist.

Was bedeutet in diesem Zusammenhang das Wörtchen "wohl"?

Ob der Schalter in Ordnung oder defekt ist, kannst Du doch mit einem Multimeter im Ohm-Messbereich eindeutig feststellen.

Dir fehlt bei Deinen Basteleien doch nicht so ein grundlegendes Meßinstrument wie ein 5-Euro Billig-Multimeter, um auch nur einfachste Messungen in Spannungs-, Strom- und Widerstandsmeßbereichen durchzuführen, oder?

Natürlich habe ich solch ein Messgerät Zuhause!
Ich war aber unterwegs und da hatte ich ein solches Messgerät nicht zur Hand!
Also haben wir die Drähte vom Schgalter abgeknipst und zum Testen einfach zusammengehalten und siehge da es funktioniert!

Gruß Lutz