Lektion 15 – Array
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 das 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.
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]); } }
Shyning 29. Oktober 2015
Viele der Klammern bei den Arrays sind falsch
Oftmals geht der int mit { auf und mit ) zu
Hat mich im ersten moment verwirrt^^
Stefan Hermann 26. November 2015
Oh, danke für den Hinweis. Ist behoben