Pages: [1]   Go Down
Author Topic: Problem mit Pushbutton  (Read 868 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 1
Posts: 21
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:

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
Logged

Germany
Offline Offline
Sr. Member
****
Karma: 2
Posts: 285
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ! smiley-wink

grüße
Lorenz
« Last Edit: February 01, 2013, 02:42:53 pm by lgrube96 » Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 21
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Germany S-H
Offline Offline
Faraday Member
**
Karma: 140
Posts: 2897
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

Germany
Offline Offline
Sr. Member
****
Karma: 2
Posts: 285
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 !
« Last Edit: February 01, 2013, 03:07:44 pm by lgrube96 » Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 21
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Gruß Lutz
Logged

Germany
Offline Offline
Sr. Member
****
Karma: 2
Posts: 285
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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...
« Last Edit: February 01, 2013, 03:47:58 pm by lgrube96 » Logged

Chemnitz/Saxony/Germany
Offline Offline
Full Member
***
Karma: 0
Posts: 107
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 21
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Germany S-H
Offline Offline
Faraday Member
**
Karma: 140
Posts: 2897
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 21
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Pages: [1]   Go Up
Jump to: