Arrays usw

Also ich will ne lichterkette laufen lassen, dazu will ich alle leds und die dazugehörigen pins mittels eines arrays und einer for schleife füllen

hier erstmal das bild vom steckboard

hier der erste auszug aus meinem program

int led[]={13,12,11,10,9,8};

void setup()
{
For int i=0 to led.getupperbound //getupperbound bedeutet ja gehe zum höchsten wert meines arrays led
(diesen Befehl kenn ich aus VB, weiß nicht wie er in der arduinosprache lautet)
}
void loop()
{
for (int i=1;i=6;i++)
{
digitalWrite (led*,HIGH);*

  • }*
    }
    also die leds sollen alle nacheinander angehen und danach wieder mit ner for-schleife ausgehen.
    nun meine frage, kann man die ports mittels eines arrays und einer schleife belegen??

Hallo brunneu

Die Programmiersprache die Arduino einsetzt ist C++. VB Funktionen oder Befehle funktionieren nicht. Du mußt die gleichwertige C-Funktion suchen.

Du mußt C lernen ansonsten funktioniert nichts. Deine Syntax ist fehlerhaft. Die Programme funktionieren so nicht.

int led[]={13,12,11,10,9,8};
...
for (int i=1;i<6;i++)
  {
  digitalWrite (led[i],HIGH);
  delay (500);
  }

Diese Schleife schaltet die LEDs der Reihe nach ein, mit einer Pause von 0,5 Sekunden zwischen jedem LED.
wenn Du die Richtung ändern willst dann :

for (int i=5;i>=0;i--)

Grüße Uwe

uwefed:

int led[]={13,12,11,10,9,8};

...
for (int i=1;i<6;i++)
  {
  digitalWrite (led[i],HIGH);
  delay (500);
  }

Achtung, in C beginnt das Array mit dem Index 0 und geht bis 5. Daher muss die erste for-Anweisung so aussehen:

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

Passiert fast jedem... :wink:

Wolfgang

ja stimmt ja arrays beginnen ja bei 0, muss meine programmierkenntnisse mal wieder ein bischen auffrischen :slight_smile:

jetzt nochmal zu meiner frage wie lautet das getupperbound in c?

voithian:
Achtung, in C beginnt das Array mit dem Index 0 und geht bis 5. Daher muss die erste for-Anweisung so aussehen: ...
Passiert fast jedem... :wink:
Wolfgang

Hast recht Wolfgang. :~ :frowning:
Entschuldige brunneu, hatte ich übersehen.
Grüße Uwe

brunneu:
jetzt nochmal zu meiner frage wie lautet das getupperbound in c?

Gibt es nicht in "C"!

Da musst du selber höllisch aufpassen, dass du nicht die Grenzen des Arrays überschreitest. Mit deinem Programmcode kannst du nämlich beliebig vor oder hinter das Array schreiben (mit Index -1 zum Beispiel oder mit Index 65000). Dann ist das Unheil vorprogrammiert.

Normalerweise facht so etwas immer die Diskussion der VB-, C#- oder Java-Programmierer an, dass "C" doch ganz großer Mist ist, aber dafür kannst du natürlich in "C" jedes einzelne Bit im Speicher persönlich begrüßen. Ich möchte bitte nicht, dass jetzt hier im Forum ein Krieg wegen der "besten" Programmiersprache ausbricht! :wink:

Du kannst die Sache ein bischen entschärfen, indem du "defines" verwendest. Das macht die Sache ein wenig übersichtlicher. Bei Größenänderungen des Arrays musst du dann nur an einer Stelle das "define" ändern.

#define ANZAHL_LEDS  6

int led[ANZAHL_LEDS] = {13,12,11,10,9,8};
...
for (int i=0; i<ANZAHL_LEDS; i++)
  {
  digitalWrite (led[i], HIGH);
  delay (500);
  digitalWrite (led[i], LOW);
  }

Die Verwendung von "defines" ist übrigens nur eine Maßnahme zum "Übersichtlich machen". Der Präprozessor, der vor dem eigentlichen Compilieren aufgerufen wird, ersetzt einfach in deinem Programmcode den Text "ANZAHL_LEDS" durch die Zahl 6.

voithian:

brunneu:
jetzt nochmal zu meiner frage wie lautet das getupperbound in c?

Gibt es nicht in "C"!

Da musst du selber höllisch aufpassen, dass du nicht die Grenzen des Arrays überschreitest. Mit deinem Programmcode kannst du nämlich beliebig vor oder hinter das Array schreiben (mit Index -1 zum Beispiel oder mit Index 65000). Dann ist das Unheil vorprogrammiert.

Normalerweise facht so etwas immer die Diskussion der VB-, C#- oder Java-Programmierer an, dass "C" doch ganz großer Mist ist, aber dafür kannst du natürlich in "C" jedes einzelne Bit im Speicher persönlich begrüßen. Ich möchte bitte nicht, dass jetzt hier im Forum ein Krieg wegen der "besten" Programmiersprache ausbricht! :wink:

Du kannst die Sache ein bischen entschärfen, indem du "defines" verwendest. Das macht die Sache ein wenig übersichtlicher. Bei Größenänderungen des Arrays musst du dann nur an einer Stelle das "define" ändern.

#define ANZAHL_LEDS  6

int led[ANZAHL_LEDS] = {13,12,11,10,9,8};
...
for (int i=0; i<ANZAHL_LEDS; i++)
  {
  digitalWrite (led[i], HIGH);
  delay (500);
  digitalWrite (led[i], LOW);
  }




Die Verwendung von "defines" ist übrigens nur eine Maßnahme zum "Übersichtlich machen". Der Präprozessor, der vor dem eigentlichen Compilieren aufgerufen wird, ersetzt einfach in deinem Programmcode den Text "ANZAHL_LEDS" durch die Zahl 6.

versteh ich das richtig, die arduino sprache ist also reines c++ oder gibt es da noch ein paar kleine unterschiede?

brunneu:
versteh ich das richtig, die arduino sprache ist also reines c++ oder gibt es da noch ein paar kleine unterschiede?

Bravo, der Kandidat hat 100 Punkte!

Um genau zu sein, ein Mischmasch aus C und C++:

Manche der mitgelieferten Arduino-Funktionen sind in C geschrieben, manche in C++ (speziell manche zusätzliche Libraries) und andere Dateien haben zwar die Dateierweiterung .cpp wie üblicherweise C++-Dateien, enthalten aber keine C++-typischen Sprachelemente wie Klassen, Vererbung, usw. (wie main.cpp, Tone.cpp, WMath.cpp).

Und du kannst ganz normal in C programmieren (und mit Einschränkungen in C++) und tust es ja auch. Praktisch alles was in C geht, geht auch mit der Arduino-Umgebung (weil es eben C ist).

Alle Unklarheiten beseitigt?
Gruß Wolfgang