Der Programmtext aus dem letzten Beispiel ist ziemlich lang, obwohl ständig fast die gleichen Befehle wiederholt werden. Das geht auch leichter – mit dem Array.
Ein Array ist eine spezielle Art der Variable. Sie kann gleich mehrere Werte speichern.
Stell Dir ein Array wie ein Containerschiff vor. Die Container sind nummeriert und wenn man in einen hinein sehen möchte, muss man die Nummer mit angeben. Die Nummern der Container fangen bei 0 an, was manchmal zu Verwirrung führt.
Auch ein Array muss angelegt (deklariert) werden. Dazu gibt es mehrere Möglichkeiten.
So deklariert man ein leeres Array ohne Wertzuweisung.
int zahlen[6];
Hier wird ein Array mit dem Namen zahlen angelegt. Der Variablentyp ist int. Arrays können immer nur Werte vom gleichen Typ speichern. Hier also ganzzahlige Werte. Die 6 in den eckigen Klammern bedeutet, dass sozusagen das Array-Containerschiff sechs Container hat. Man nennt das die Länge des Arrays.
Eine andere Möglichkeit ein Array anzulegen, geht so:
int zahlen[] = {10, 78, 45, 67, 38, 14};
Hier werden dem Array Werte direkt zugewiesen und deshalb muss man die Länge des Arrays nicht extra in die eckigen Klammern schreiben. Auf der Tastatur findest du die eckigen Klammern übrigens beim PC mit Alt-Gr + 8 und Alt-Gr + 9, am Mac mit Alt + 5 und Alt + 6. Wie lang ist denn das Array? Genau: 6.
Wie weist man aber Werte dem Array zu? Eigentlich genau so, als würde man sie in eine normale Variable schreiben, nur dass die Stelle im Array, in die wir schreiben wollen, angegeben werden muss.
zahlen[3] = 50;
Bleibt noch die Frage, wie man Werte aus dem Array ausliest. Sagen wir beispielsweise, wir möchten den Wert an der vierten Stelle (also Stelle 3) in die Variable a schreiben.
a = zahlen[3];
In der letzten Lektion haben wir Tonfrequenzen abgespielt. Dazu haben wir die gleichen Befehle einfach kopiert. Jetzt wollen wir die Tonhöhen diesmal in ein Array übertragen. Wir bleiben zunächst bei dem kurzen Beispiel:
int frequenzen[] = {262, 294, 330, 349, 392, 392};
Gut. Wir haben ein Array vom Typ int angelegt. Es heißt “frequenzen” und speichert die Tonhöhen unserer Melodie. Um einen einzelnen Wert aus dem Array zu bekommen, kann man einfach auf die Stelle zugreifen:
frequenzen[0] ergibt 262 frequenzen[1] ergibt 294 frequenzen[5] ergibt 392
Wir benutzen das Array also genau wie jede andere Variable, nur dass wir noch die Stelle mit angeben müssen.
Für die Melodie ist aber auch die Dauer der Töne von großer Bedeutung. Also speichern wir diese auch:
int tonDauer[]= {200, 200, 200, 200, 400, 400};
Die Länge der Arrays sollte auf jeden Fall gleich sein. Um nun alle Töne zu spielen, brauchen wir eine for-Schleife. Die Zählervariable zählt, welcher Ton gerade gespielt werden soll und übergibt das an die Arrays:
int frequenzen[] = {262, 294, 330, 349, 392, 392}; int tonDauer[]= {200, 200, 200, 200, 400, 400}; int tonAnzahl = 6; void setup() { } void loop() { for (int ton=0; ton<tonAnzahl; ton=ton+1){ tone(9, frequenzen[ton]); delay(tonDauer[ton]); noTone(9); delay(tonDauer[ton]); } }
Der Code ist doch schon viel kleiner geworden. Wie ist das, wenn die ganze Melodie gespielt werden soll? Versuch es mal selbst.
Lösung hier:
int frequenzen[] = {262, 294, 330, 349, 392, 392, 440, 440, 440, 440, 392, 440, 440, 440, 440, 392, 349, 349, 349, 349, 330, 330, 392, 392, 392, 392, 262}; int tonDauer[]= {200, 200, 200, 200, 400, 400, 200, 200, 200, 200, 800, 200, 200, 200, 200, 800, 200, 200, 200, 200, 400, 400, 200, 200, 200, 200, 800}; int tonAnzahl = 27; void setup() { } void loop() { for (int ton=0; ton<tonAnzahl; ton=ton+1){ tone(9, frequenzen[ton]); delay(tonDauer[ton]); noTone(9); delay(tonDauer[ton]); } }
Pingback: Viele Buttons mit Arduino auslesen – Arduino Tutorial
zum glück bin ich eigentlich mit dem Thema hier schon durch an sich aber ne schön gemachtes tut…
besonders das auch auf die Nutzung von arrays in Verbindung mit for schleifen eingegangen wird fand ich gut.
aber mal zur Qualitätskontrolle ;P beim vorletzten Containerschiff bild “Zuseisen”? scheint mir eigentlich Zuweisen zu heißen :) text in Bildern vielleicht besser kontrollieren ärgerlich da typos zu haben :/ und ka wieso aber der “Für die Lösung hier klicken!” button verschiebt bei mir nur die Namen eine Zeile runter Lösung wird allerdings auch schon angezeigt weis aber nicht ob das nur bei mir so ist…
MfG
Raze
Hallo Raze VorteX, vielen Dank für Deine Kommentare! Das hilft mir wirklich weiter. Die Navigation ist eine Baustelle und dann hat die Seite bewegte Zeiten hinter sich. Ich habe zwei Seiten zusammengeführt und werde sicherlich noch eine ganze Weile an den Nahtstellen arbeiten. Die Idee mit dem Forum finde ich aber spannend. Das hatte ich vor langer Zeit schon mal, musste es aber wegen zu viel Spam wieder deaktivieren. Ich werde aber mal gucken, ob die Technik da weiter ist. Also nochmal vielen Dank für die Hinweise und Vorschläge! Liebe Grüße Stefan
freut mich. spam sollte kein proplem sein gängig wäre da wohl ein reputation system das neuen/unbekannten usern ein limit an nachrichten pro zeit setzt etwa 1 alle 5 min… report systeme und gegebenenfalls mods je nach grösse und bedarf also vom technischem aspekt dürften trolle keine chance bei einer aktiv geführten seite haben. viel erfolg.
mfg
RazeVorteX
cooler kommentar jedoch würde cih mir nochmal die rs im text anschauen :/
MFG
momslayer3000
Sehr gutes Programm!
geiler name
Viele der Klammern bei den Arrays sind falsch
Oftmals geht der int mit { auf und mit ) zu
Hat mich im ersten moment verwirrt^^
Oh, danke für den Hinweis. Ist behoben :-)
Sehr gut )
;-]
Danke wegen euch bin ich nicht beim Test durchgefallen