Pages: [1]   Go Down
Author Topic: Wie wird "i" definiert?  (Read 982 times)
0 Members and 1 Guest are viewing this topic.
Germany
Offline Offline
Newbie
*
Karma: 0
Posts: 43
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

CH
Offline Offline
God Member
*****
Karma: 19
Posts: 703
Book Writer "Arduino Praxiseinstieg"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

i wird lokal in setup() definiert.

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

Aber im loop() ist i als Variable nicht bekannt. Vermutlich willst du den Zufallswert ausgeben, also:
Code:
void loop()
{
  int i=random(13);
 digitalWrite (ledPin[i], HIGH);
}
Ich denke das sind auch noch zuviel Klammern  smiley-wink
Logged

Germany
Offline Offline
Newbie
*
Karma: 0
Posts: 43
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-sad bzw. wenn ich in void loop noch delay(1000) anhänge, fängt eine nach der anderen an zu leuchten, erlischt aber nicht mehr
!
« Last Edit: February 09, 2011, 12:31:40 pm by iBildermacher » Logged

Germany
Offline Offline
Edison Member
*
Karma: 47
Posts: 2320
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

Germany
Offline Offline
Newbie
*
Karma: 0
Posts: 43
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Viele Grüße
Florian
Logged

CH
Offline Offline
God Member
*****
Karma: 19
Posts: 703
Book Writer "Arduino Praxiseinstieg"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

CH
Offline Offline
God Member
*****
Karma: 19
Posts: 703
Book Writer "Arduino Praxiseinstieg"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Ah stimmt ja:) entschuldigt für die Anfängerfragen
Kein Problem, dafür ist ein Forum gedacht.  smiley-wink
Logged

CH
Offline Offline
Newbie
*
Karma: 1
Posts: 18
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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
Logged

Copenhagen, Denmark
Offline Offline
Edison Member
*
Karma: 32
Posts: 1214
Have you testrun your INO file today?
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Pages: [1]   Go Up
Jump to: