Go Down

Topic: Warum funktioniert dieser Sketch ? (Read 1 time) previous topic - next topic

Moeoeoep

Guten Tag Zusammen,

wie so viele bin ich Neueinsteiger beim Arduino.
Nun bin ich seit 3 Tagen Besitzer eines Arduino Uno und dem Buch Die elektronische Welt mit Ardiuno entdecken.

Nun ja soweit so gut, alles prima, alles toll.
Nach jedem Projekt gibt es eine Aufgabe um das gelernte zu vertiefen.

Nun war die Aufgabe einen Sketch zu schreiben der LED´s mit einem Taster "weiterschaltet".
Dies ist mir auch gelungen aber ich verstehe nicht warum er geht.

Code: [Select]
int ledPin [] = {4,5,6,7,8,9,10,11,12,13};   //  LED 1-10
int taster = 3;                    //  Taster pin 3
int wartezeit = 100;              // Wartezeit fuer entprellen
int tasterStatus = 0;                  // Variable Taster status aktuell
int tasterStatusvorher = 0;            // Variable Taster Status vorher
int zaehler = 0;                       // Variable Zaehler


void setup()
{
  Serial.begin(9600);              // Bautrate fur Serialen Monitor
    pinMode(taster, INPUT);        // Eingang Taster
  for(int u=0; u<10; u++){           // Schleife fuer Ausgänge setzten
    pinMode(ledPin[u], OUTPUT);    // Ausgänge setzten
  }

}

void loop()
{
  tasterStatus = digitalRead(taster);  // Abfrage Taster
  if (tasterStatusvorher != tasterStatus) // Alter Taster STatus mit aktuellem taster Status ungleich ?
  {
    if (tasterStatus ==HIGH)     // ist tasterStatus = wahr
   {
    zaehler ++;     // setzte zaehler +1
    Serial.println(zaehler);
  }
   
  }
  tasterStatusvorher = tasterStatus; // Speichert den aktuellen taster status
 
  if (zaehler >=0){                  // wenn zaehler groesser oder gleich 0
  digitalWrite(ledPin[zaehler], HIGH);
  digitalWrite(ledPin[zaehler], LOW);
  }
  if (zaehler >9)   
  zaehler =0;      //wenn zaehler groesser 9 setze ihn auf 0
}


mir geht es um

if (zaehler >=0){                  // wenn zaehler groesser oder gleich 0
  digitalWrite(ledPin[zaehler], HIGH);
  digitalWrite(ledPin[zaehler], LOW);

Es ist nun so das wenn ich den Taster drücke geht die nächste LED an und die Aktuelle LED aus,
genau das was passieren soll aber warum ?

Mein Variablle (zaehler) sollte doch identisch sein, Sprich normal dürfte keine LED leuchten.
aber warum zum teufel geht es trotzdem ?

hatte vorher einiges ausprobiert, aber hat nicht zum erfolg geführt und wo ich nicht mit gerechnet hätte gehts.

Danke
Benedikt




maverick1509

Zunächst ist die Abfrage if (zaehler >=0){ 
völlig überflüssig. zaehler ist immer größer als Null, denn wenn zaehler 9 ist wird er auf 0 gesetzt
und im nächsten Durchlauf wieder ++ eins hoch gezählt.
Aber die LED dürften doch nur einmal ganz kurz blinken, denn sie werden ja an und sofort wieder
ausgeschaltet. Das es der Reihe nach geht liegt doch am array, denn bei jedem Tastendruck wird doch der
nächste Pin aus dem array angesprochen.

Moeoeoep

Danke für deine Antwort,

der zaehler ist noch vom eigentlichen Sketch aber hast recht, den hätte ich auch entfernen können.

"Aber die LED dürften doch nur einmal ganz kurz blinken, denn sie werden ja an und sofort wieder
ausgeschaltet."

Das ist das, was ich auch erwartet habe aber es ist so das die LED die An war Aus geht und die Folgende An geht.
Und das ist ja das was ich nicht kapiere.

mit dem arry hatte ich ja kapiert. Ich verstehe halt nur die sache nicht das die alte LED aus geht und die nächste an.

Ich hatte es vorher mit 2 Variablen versucht hat aber nicht so geklappt wie ich wollte,
Dann hatte ich versucht die gleiche Variable im LOW befehl mit -- eins runter zuzählen aber das gab ganz merkwürdige Ergebnisse.

Daherher ja die frage warum Funktioniert das so ?


Realizer

#3
Oct 13, 2012, 08:35 pm Last Edit: Oct 13, 2012, 08:59 pm by Realizer Reason: 1
Code: [Select]
 if (zaehler >=0){                  // wenn zaehler groesser oder gleich 0

Ist doch immer erfüllt ?

Code: [Select]
digitalWrite(ledPin[zaehler], HIGH);
digitalWrite(ledPin[zaehler], LOW);


Wird ständig durchlaufen. Bist Du dir sicher daß die LEDs nicht flimmern anstatt durchgehend zu leuchten ? In einer Geschwindigkeit, die das Auge nicht mehr wahrnehmen kann.

Edit:

Versuche mal folgende Ergänzung:
Code: [Select]

digitalWrite(ledPin[zaehler], HIGH);
delay(500);
digitalWrite(ledPin[zaehler], LOW);
delay(500);


Eine Kuh macht muuhh.
Viele Kuehe machen Muehe

Moeoeoep

Danke Realizer

Das war des Rätzel´s Lösung.
Die armen LED´s ...

Naja hab es nun mit 2 Variabelen da geht es dann auch mit dem delay :)

Danke
Grüße
Benedikt

Go Up