===== Arduino-WS (3) ===== **Arduino und die Programmiersprache C** Inhalt des 3. Teils des Arduino-Workshops: Arrays und Schleifen (while und for) Variablen: Typ Array KURZFORM (lang:s.u.) -------------------- const int LEN_a = 3; int a[LEN_a]; // [] deuten auf ein Array hin a[0]=3; a[1]=2; a[2]=1; int a[LEN_a] = { 3, 2, 1 }; // ergibt dasselbe // a[1] ist 2 a[1] = 0; // ergibt für a: { 3, 0, 1 } // a[1] ist 0 Schleifen: while / for KURZFORM (lang:s.u.) ---------------------- int a[LEN_a] = { 3, 2, 1 }; // while-Schleife int i=0; while(i **Arrays und Schleifen ausführlicher** Variablen: Typ Array -------------------- const int LEN_a = 3; int a[LEN_a]; // [] deuten auf ein Array hin a[0]=3; a[1]=2; a[2]=1; int a[LEN_a] = { 3, 2, 1 }; // ergibt dasselbe // a[1] ist 2 a[1] = 0; // ergibt für a: { 3, 0, 1 } // a[1] ist 0 char meintext[]= "Bla bla"; // ä,ö,ü,... gehen evtl. nicht // strlen(meintext) ergibt 7 (Länge des Strings) // sizeof(meintext) ergibt 8 (Speicherverbrauch in Byte) char meintext[]= {'B', 'l', 'a', ' ', 'b', 'l', 'a', 0}; // das Gleiche // ^-Ende-Markierung // "ASCII-Tabelle" (Auszug): // ' ' == 32 // '!' == 33 // '0' == 48 // '1' == 49 // 'A' == 65 // 'B' == 66 // 'a' == 97 // 'b' == 98 // Zur Erinnerung: // char konnte -128...127 (oder evtl. 0...255) speichern // unsigned char konnte 0...255 speichern // signed char konnte -128...127 speichern // alle obigen verbrauchen 1 Byte int a[LEN_a] = { 3, 2, 1 }; int *meinzeiger = a; // meinzeiger[i] ist dasselbe wie a[i] a[2] = 0; // meinzeiger[2] ist 0 // Achtung: sizeof(...) (Speicherverbrauch) geht nicht immer wie man erwartet! // sizeof(a) ist der Speicherverbrauch für das Array a, also 3*2Byte // sizeof(meinzeiger) ist der Speicherverbrauch für einen Zeiger Serielle Schnittstelle (UART) ----------------------------- Arduino-Dokus (nicht nur dazu) siehe: http://www.arduino.cc/en/Reference/HomePage http://labs.arduino.org/Arduino+Reference void setup() { Serial.begin(9600); Serial.println("Hallo Welt!"); } void loop() { if (Serial.available()) { char c = Serial.read(); Serial.print("Gesehen: "); Serial.println(c); // "ln" bedeutet Zeilenfortsatz danach char s[]="Gesehen: x"; s[9] = c; // c anstelle des 'x' Serial.println(s); } } // Serial.println(x); ist nicht C, sondern C++ (Indiz: der '.' "im Namen"). // Es gibt x aus, wobei x Ein int, float, char *, ... etc. ein kann Schleifen: while / for ---------------------- const int LEN_a = 3; int a[LEN_a] = { 3, 2, 1 }; // while-Schleife int i=0; while(i **Aufgabe** * Blinkmuster hinschreiben * Das Blinkmuster immer wiedergeben, mit Pause dazwischen * Ziel: Ein Spiel bauen, bei dem man eine zufällig ausgewählte Folge von Lichtsignalen nachspielen soll (mit Tastern neben den z.B. 3 oder 4 LEDs, die für diese Folge von Lichtsignalen dienen). Bei Erfolg kann man dann evtl. eine längere zufällige Folge vorgeben. Man kann auch Töne mit den Lichtsignalen verbinden. Wer bei einem Frickl (nicht Workshop-Termin) vorbei kommt, wir dabei unterstützt, das zu bauen und zu programmieren. Achtung: Für das Spiel ist unten eingeführtes Array "muster" dann weniger geeignet, weil beim Spiel immer nur eine LED zur Zeit leuchten sollte, reicht da ein eindimensionales Array (int muster[PHASEN]). const int PHASEN = 4; const int PIN_LEDs = 3; int PIN_LED[PIN_LEDs] = { 3, 5, 6}; int muster[PHASEN][PIN_LEDs] = { {0,1,0}, {1,0,1}, {0,1,0}, {0,0,0} }; // Zugriff geht dann so: // muster[1][2] ergibt 1 // muster[3][2] ergibt 0 (der jeweils höchste erlaubte Index!) void setup() { for (int i=0; i