Wie wird "i" definiert?

Hallo,
ich bin immernoch am üben und mir stellen sich einige Fragen.
Ich wollte eine art "Sternenhimmel" programmieren. Dafür habe ich an jedem digitalen Pin eine Led.
Nun lautet mein Code:

int ledPin[8] = {3, 4, 8, 9, 10, 11, 12, 13};

void setup() {
  for (int i = 0; i<13; i++) {
  pinMode(ledPin[i], OUTPUT);
  }
}

void loop() 
{
  random(13); {
    digitalWrite (ledPin[i], HIGH);
  }
}

das Programm sagt aber jetzt, dass "i" nicht definiert ist, aber laut meinem Buch muss ich dort nichts definieren, wenn ich es richtig verstanden habe?
Ich würde mich sehr über eine kurze Erkärung freuen:)

PS: gibt es eine Seite, wo ich solche Dinge direkt nachlesen kann? Am besten auf Deutsch, wegen der Fremdwörter?

Viele Grüße und danke schonmal:)
Florian

i wird lokal in setup() definiert.

for (int i = 0; i<13; i++) {

Aber im loop() ist i als Variable nicht bekannt. Vermutlich willst du den Zufallswert ausgeben, also:

void loop() 
{
  int i=random(13);
 digitalWrite (ledPin[i], HIGH);
}

Ich denke das sind auch noch zuviel Klammern :wink:

Achso, dass heißt, ich kann auch auch in void setup oder void loop etwas definieren? Ich dachte, dass müsste man am Anfang.

Danke für die schnelle Hilfe:)

Was habe ich vergessen, damit die sichtbar nacheinander blinken? jetzt leuchten alle :frowning: bzw. wenn ich in void loop noch delay(1000) anhänge, fängt eine nach der anderen an zu leuchten, erlischt aber nicht mehr
!

Zum Blinken gehört auch, dass man LEDs wieder ausmacht. :wink: Und deine Schleife läuft so schnell durch, dass im Bruchteil einer Sekunde ganz plötzlich alles leuchtet.

Ah stimmt ja:) entschuldigt für die Anfängerfragen, ich hoffe ich kann demnächst auch mal helfen:)

Viele Grüße
Florian

Ja, die leuchten immer, da die Haupschlaufe dauern durchlaufen wird.

Noch etwas zum Array.
Das Array wird mit einer Grösse von 8 definiert und mit Werten gefüllt

int ledPin[8] = {3, 4, 8, 9, 10, 11, 12, 13};

Aber im Code werden dann plötzlich Array-Elemente angesprochen, welche nicht definiert sind.

for (int i = 0; i<13; i++)

Hier werden Elemente 0 bis 12 angesprochen, obwohl nur 8 definiert sind.
Das gleiche mit der Zufallszahl random(13)

Darf ich fragen woher dieser Code ist?

Ah stimmt ja:) entschuldigt für die Anfängerfragen

Kein Problem, dafür ist ein Forum gedacht. :wink:

Kleiner Tipp von mir:
Pass auf mit Array-Grenzen, denn das merkt der Compiler meist nicht, und es führt zu Fehler, welche sehr schwer zu finden sind.

Ich persönlich verwende für Array-Grössen meistens eine Konstante. Siehe Beispiel unten. Es hat 2 zentrale Vorteile:

  1. Wenn du das Array grosser/kleiner machst, musst du nur die Konstante ändern. (aber zuerst überlegen, insbesondere bei Ein/Ausgängen
  2. Du hälst die Grenzen immer ein
#define MY_SIZE 5
int myarray[MY_SIZE];

for( int i=0 i <  MY_SIZE; i++)
  myarray[i] = i ;

Noch eine Falle für Anfänger: Ein Array beginnt immer bei 0. Also der erste Eintrag ist auf Position 0, bei deinem Beispiel mit 8 Einträgen wäre der 7. der Letzte.

Habe alles von da: http://www.arduino.cc/en/Reference/Array

Wenn man int Liste[] = { 4, 8, 23, 0 } ; benützt dann kann der Kompiler selbst zählen, und dass Array wird die richtige grösse kriegen.

Um die grösse zu sehen, benütze sizeof(Liste)/sizeof(int)