Go Down

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

uwefed

Die Alternative ist

Quote
digitalWrite(ledPin[zaehler-1], LOW);
digitalWrite(ledPin[zaehler], HIGH);


Dann mußt Du aber den Fall wenn die letzte LED ausgehen soll und die erste an anders realisieren.

Grüße Uwe

Moeoeoep

Hallo Uwe

ich hab es nun so realisiert;
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
int zaehler2 = -1; //Variable Zaehler 2


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
    zaehler2 ++;   // setze zaehler2 +1 (auschalten LED)
    Serial.println(zaehler2); //ausgabe zaehler 2
  }
   
  }
  tasterStatusvorher = tasterStatus; // Speichert den aktuellen taster status
 
  {                 
  digitalWrite(ledPin[zaehler], HIGH);
  digitalWrite(ledPin[zaehler2], LOW);
  }
  if (zaehler >9)   
  zaehler =0;      //wenn zaehler groesser 9 setze ihn auf 0
  if (zaehler2 >8)
  zaehler2 = -1;  // wenn zaehler2 groesser 8 setze ihn auf -1
}


es ist sicherlich auch noch nicht die schönste Variante aber ich bin ja noch am üben :)
2 Kapitel weiter wurde auch schon was erklärt, aber das habe ich dann in der Ampelsteuerung umgesetzt.

es ist sehr interesant wieviele Wege nach Rom führen, aber für mich als Anfänger kann es auch sehr verwirrend sein.
Da ich zugegebener Maßen auch nicht der hellste im Kopf bin dauert es auch länger bis ich etwas verstehe,
Daher kann ich mich auch sehr über 2 blinkende LED´s freuen :)
Naja wie heist es immer so schön "hätt ich doch mal was gescheites gelernt" dann wäre ich da schon seit 15 jahren im Thema :)

Grüße
Benedikt




uwefed

Du kannst es auch mit 1 Variablen machen und es ist besser zuerst die vorige LED auszuschalten und dann die LED einzuschalten.

Code: [Select]

...
if (tasterStatus ==HIGH)     // ist tasterStatus = wahr
   {
    zaehler ++;     // setzte zaehler +1
    ...
  }
...
if (zaehler >9)
{
zaehler = 0;   
digitalWrite(ledPin[9], LOW);
}
else
{
digitalWrite(ledPin[zaehler-1], LOW);
}
digitalWrite(ledPin[zaehler], HIGH);


Quote
Da ich zugegebener Maßen auch nicht der hellste im Kopf bin dauert es auch länger bis ich etwas verstehe,

Nein, es hat es Dir nur noch niemand richtig gut erklärt.  ;) ;) ;)

Grüße Uwe

Moeoeoep

erst mal Danke für deine netten Worte zum schluss :)

ich hätte nun aber doch noch 2 Fragen ..

gibt es einen unterschied zwischen -- und -1 ?
Ich hatte bei meinen versuchen mit nur 1 Variable [zaehler--] verwendet und daran bin ich anscheinend gescheitert.
-1 geht -- geht nicht.

aus welchen Gründen ist es besser erst die eine LED auszuschalten um dann die nächste einzuschalten ? Da geht es ja nur um Millisekunden.
Ist das auch so ein Ding was man sich besser dierekt angewöhnt? Damit man bei späteren Projekten nicht mal 2 Verbraucher kurzzeitig an hat die dann zuviel Strom ziehen ?

Gruß
Benedikt

uwefed

#9
Oct 15, 2012, 11:15 pm Last Edit: Oct 15, 2012, 11:30 pm by uwefed Reason: 1
i-- und i=i-1 ist das gleiche.

array[zaehler--] benutzt den Wert der Variablen zaehler als Index des Arrays und zieht dann 1 ab.
Du hast also folgendes gemacht:
array[zaehler];
zaehler--;

array[zaehler-1] benutzt den Wert der Variablen zaehler und subtrahiert davon 1 bevor der Wert als Index des Arrays verwendet wird. Der Wert der Variablen zaehler wird nicht verändert.

Zuerst ausschalten dann einschalten:
In diesem Fall ist es fast egal;
Du hast recht, wenn beide kurz eingeschaltet sind, dann ist kurz der Strom größer.
Es kann auch sein, daß man dieses kurz eingeschaltet sein, sieht. zB bei einer Matrix.
Wie Du richtig bemerkst ist das eines von den Dingen, die man sich angewöhnen sollte, um in bestimmten Fällen, wo es nicht egal ist, dann keinen Fehler zu machen.

Ich bin der Meinung, daß nicht unbedingt der Schüler begriffstützig ist, sondern meist der Lehrer nicht lehren kann. Ich erinnere mich in Film Full Monty wo sie den Tanz einüben. Da sollen einige zurückgehen und andere nach vorne um in einer Reihe zu stehen. Gerald, der den Lehrer macht, bringt das nicht richtig rüber, bis einer sagt: "so wie in einer Abseitsfalle" und allen ist klar was gemeint ist. http://www.youtube.com/watch?feature=player_detailpage&v=y6T9Bz4bBlg#t=119s (sind leider nur 5 Sekunden ohne Ton).

Grüße Uwe

Go Up