Beginnen wir mit dem Programmieren. Aber warum denn gerade mit Kommunikationen über die serielle Schnittstelle? Das scheint etwas viel zu sein für den Anfang. Aber es ist die beste Art und Weise, das Debugging eines Codes vorzunehmen, wenn eine Steuerplatine programmiert wird. Wenn wir uns nicht sicher sind, was gerade vor sich geht oder warum das Programm nicht so funktioniert wie wir möchten, müssen wir während der Ausführung Informationen erhalten. Wenn wir mit Platinen wie der ZUM BT 328 arbeiten, ist es am einfachsten, diese Information über die serielle Schnittstelle zu senden und zu kontrollieren. Also, dann nichts wie los.
Ein leeres Programm
Alle Programme in Arduino haben die folgende Minimalstruktur:
1 2 3 4 5 6 7 8 9 |
void setup() { } void loop() { } |
In der Funktion setup konfigurieren wir alles Notwendige bereits im Voraus. In der Funktion loop wird der Code implementiert, der später ohne Pause in der Platine ausgeführt wird. Mach dir nichts daraus, wenn du mir nicht ganz folgen kannst. Das Ziel dieser Lektion ist es, dass du in der Lage bist, mit dem Computer über die serielle Schnittstelle zu kommunizieren, auch wenn du nicht genau verstehst, was vor sich geht. Gehe zu Codebender und öffne ein neues Programm; automatisch erscheint dir das leere Programm:
Hallo Welt – Beginnen wir mit der Kommunikation über die serielle Schnittstelle
Die Konfiguration der seriellen Schnittstelle muss über die Funktion setup erfolgen. Hierfür verwenden wir das Objekt Serial, das in den Arduino Libreries (Bibliotheken) enthalten ist. Es ist ausreichend wenn du angibst, mit welcher Geschwindigkeit du mit dem Computer kommunizieren möchtest. Diese Geschwindigkeit entscheidest du; normalerweise wählt man die Werte 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, oder 115200. Am häufigsten wird 9600 verwendet. Diese Zahl gibt die Bits pro Sekunde an, mit der die Information über die serielle Schnittstelle übertragen wird. Natürlich kommunizieren wir um so schneller, desto höher diese Zahl ist. Gut, dann wollen wir mal konfigurieren:
1 2 3 4 |
void setup() { Serial.begin(9600); //Serial communication started at 9600 bits/sec } |
Diese Anweisung beginnt die serielle Komunikation bei 9600 Bits pro Sekunde. Wir senden die Kette Hallo Welt über die serielle Schnittstelle. Da der Text nur einmal gesendet werden soll, erfolgt es mit derselben Funktion setup:
1 2 3 4 5 |
void setup() { Serial.begin(9600); //Serial communication started at 9600 bits/sec Serial.println("Hola Mundo!"); // send "Hola Mundo!" over serial port } |
Im folgenden Video sehen wir den gesamten Programmierprozess. Ihr müsst mich entschuldigen, aber die einzige Platine, die ich gerade zur Verfügung habe, ist eine ZUM Mega. Daher ist die ausgewählte Platine die Mega und nicht die ZUM BT, aber die Funktionsweise ist für beide gleich (dies gilt für alle Arduino Platinen). Alle Videos sind in HD 1080 p aufgenommen worden, achte daher darauf, in YouTube die beste Qualität auszuwählen.
Tick Tack
Jetzt programmieren wir eine Wanduhr. Jede Sekunde erklingt ein Tick Tack. Wir programmieren dafür die Funktion Loop, die ununterbrochen ausgeführt wird:
1 2 3 4 5 6 7 |
void loop() { Serial.println("tic"); //print "beat"tic" on serial port delay(1000); //wait 1000 milliseconds Serial.println("toc"); //print "toc" on serial port. delay(1000); //wait 1000 milliseconds } |
Sehen wir uns den ganzen Prozess im Video an:
Echoooo
Abschließend verkomplizieren wir die ganze Angelegenheit noch etwas. Bis jetzt haben wir nur über den seriellen Port geschrieben. Nun wollen wir Daten erhalten und den erhaltenen Text dann erneut schreiben:
1 2 3 4 5 6 |
void loop() { if (Serial.available()>0){ //if there is data ready on serial port Serial.write(Serial.read()); //write on serial port what it has been read } } |
Dieser Code ist etwas mysteriöser. Wir erklären es dir schnell, aber keine Angst, diese Lektion dient nur zu Debugging-Zwecken. Später wird eine weitere, fortgeschrittene Lektion über serielle Kommunikation folgen. Die Funktion available() des Objektes Serial gibt die Anzahl der in der seriellen Schnittstelle zur Verfügung stehenden Bytes aus (damit sie ausgelesen werden). Sind Daten verfügbar (Serial.available()>0), lesen wir diese aus (Serial.read()) und so wie wir sie auslesen, schreiben wir sie auch wieder über die serielle Schnittstelle (Serial.write()). Dadurch, dass wir keinen automatischen Linienwechsel eingefügt haben, erfolgt das Echo direkt. Guck mal was passiert, wenn du println verwendest. Warum? Lass uns das letzte Video für heute ansehen. In der nächsten Lektion beschäftigen wir uns (wahrscheinlich) mit der Bestimmung der Variablen und ihrer Verwendung. Im Abschnitt Downloads findest du alles was du brauchst, um die Videos zu verändern, Untertitel oder sogar gesprochene Sprache hinzuzufügen. Leider können wir die Musik nicht teilen, da sie Urheberrechte besitzt (die wir bezahlt haben).