Go Down

Topic: Wie wird "i" definiert? (Read 1 time) previous topic - next topic

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:
Code: [Select]
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

Webmeister

i wird lokal in setup() definiert.

Code: [Select]
for (int i = 0; i<13; i++) {

Aber im loop() ist i als Variable nicht bekannt. Vermutlich willst du den Zufallswert ausgeben, also:
Code: [Select]
void loop()
{
  int i=random(13);
digitalWrite (ledPin[i], HIGH);
}

Ich denke das sind auch noch zuviel Klammern  ;)

#2
Feb 09, 2011, 06:28 pm Last Edit: Feb 09, 2011, 06:31 pm by iBildermacher Reason: 1
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 :( bzw. wenn ich in void loop noch delay(1000) anhänge, fängt eine nach der anderen an zu leuchten, erlischt aber nicht mehr
!

sth77

Zum Blinken gehört auch, dass man LEDs wieder ausmacht. ;) Und deine Schleife läuft so schnell durch, dass im Bruchteil einer Sekunde ganz plötzlich alles leuchtet.
Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

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

Viele Grüße
Florian

Webmeister

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
Code: [Select]
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.
Code: [Select]
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?

Webmeister

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

Kein Problem, dafür ist ein Forum gedacht.  ;)

gloeru

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

Code: [Select]

#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

Msquare

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)

Go Up