Arduino: Spach-Referenz
Autor: Prof. Dr.-Ing. Schneider
Programmstruktur
Zum Erlernen der grundlegenden Programmstrukturen, schauen Sie bitte in Ihre Vorlesungsunterlagen und in das begleitende Lehrbuch [1, S. 78 ff.].
Siehe auch: https://www.arduino.cc/reference/de/
Die Struktur eines Arduino-Programms teilt sich in zwei Bereiche auf: setup()
und loop()
(vgl. Quelltext 1).
Quelltext 1: ArduinoSketchStruktur.ino
void setup ( ) // Programmstart
{
// Anweisungen
}
void loop ( ) // Hauptschleife
{
// Anweisungen
}
Die Setup-Funktion wird einmalig beim Start des Arduino-Boards oder nach einem Reset ausgefüuhrt. In dieser Funktion werden Grundeinstellungen wie Variablendeklarationen oder die Konfiguration der seriellen Schnittstelle vorgenommen. Zusätzlich werden die Ein- und Ausgänge gesetzt.
Die Setup-Funktion ist zwingend notwendig und muss immer vorhanden sein, auch wenn keine Deklarationen erfolgen müssen. In diesem Fall bleibt die Funktion ohne Anweisungen.
Die Loop-Funktion ist der zweite Bereich der Grundstruktur eines Arduino-Programms und hat die Aufgabe eines Hauptprogramms. Nach dem einmaligen Durchlaufen der Setup-Funktion wird die Loop-Funktion durchlaufen – wie der Name schon sagt, als endlose Schleife. Im Loop werden alle weiteren Anweisungen und Funktionsaufrufe untergebracht, die im Normalbetrieb für die gewünschte Lösung benötigt werden.
Funktion
Konventionen
Klammern
Semikolon
Kommentare
Header
Datentypen
Datentypenkonvertierung
Variablen, Konstanten, Arrays und Daten
Kontrollstrukturen
if-Verzweigung
Mit der if-Verzweigung werden in Programmen Entscheidungen gefällt. An if
muss eine Frage anschließen, die als Ausdruck, der in Klammern eingeschlossen ist, angegeben wird. Wenn der Ausdruck wahr ist, wird alles Nachfolgende ausgef¨uhrt. Wenn er falsch ist, wird mit dem nächsten Code-Block fortgefahren. Die else
-Anweisung ist optional.
Quelltext: ifelse.ino
if (Bedingung 1) {
// Anweisungen 1;
}
else if (Bedingung 2) {
// Anweisungen 2;
}
else {
// Anweisungen 3;
}
Siehe auch: Arduino.cc: <ode>else
switch-case-Verzweigung
Wie auch if-Statements, erlaubt es auch switch case, dass abh¨angig von der Bedingung in verschiedenen Situationen unterschiedlicher Code ausgef¨uhrt wird. Im Detail vergleicht switch case die Variablenwerte mit denen in den case-Statements. Wenn ein passendes case-Statement gefunden wird, so wird der Code in diesem case-Statement ausgef¨uhrt. Das break-Keywort beendet das switch case-Statement und wird ¨ublicherweise am Ende jedes case-Statements verwendet. Wenn kein break-Keywort verwendet wird, f¨uhrt switch case alle Statements aus, bis ein break-Keywort auftaucht oder das switch case zu Ende ist.
Quelltext: switchcase.ino
switch (var) {
case label 1 :
// Anweisungen 1;
break;
case label 2 :
// Anweisungen 2;
break;
default:
// Anweisungen 3;
break; // Wird nicht benötigt, wenn Anweisungen vorhanden sind
}
Siehe auch: Arduino.cc: <ode>switch..case
for-Schleife
Das for
-Statement wiederholt die in Klammern nachfolgenden Anweisungen. Meistens wird eine
Z¨ahlervariable verwendet, welche hochgez¨ahlt wird und die Schleife irgendwann beendet. Das for-
Statement wird h¨aufig zur Iteration ¨uber Arrays oder Listen von Daten oder Pins verwendet.
Quelltext: forSchleife.ino
for (Initialisierung; Bedingung ; Inkrementierung ) {
// Anweisungen;
}
Siehe auch: Arduino.cc: <ode>for
while-Schleife
Eine while-Schleife l¨auft solange weiter (Eventuell auch unendlich), bis die Bedingung in den Klammern () false wird. Wenn die Variable in der Schleife sich nie ¨andert, l¨auft die Schleife unendlich. Dies kann z. B. durch das Hochz¨ahlen einer Variable oder das Lesen eines Sensorwertes erfolgen.
Quelltext: whileSchleife.ino
while (Bedingung) {
// Anweisungen;
}
Siehe auch: Arduino.cc: <ode>while
Operatoren
Eingebaute Funktionen
Bibliotheken
Serial.h
Quelltext: Serial.h<
begin(long Baudrate) // bis 115200 Baud
end()
int available() // Anzahl empfangener Bytes
int read() // -1 wenn keine Daten
int peek() // Lesen ohne den Puffer zu löschen
flush() // Puffer löschen
print(data)
println(data) // inkl. Zeilenumbruch
write(byte)
write(char * string)
write(byte * data, size)
SerialEvent() // wenn Daten fertig
Weiterführende Links
Literatur
[1] Brühlmann, T.: Arduino Praxiseinstieg. Heidelberg: mitp-Verlag, 2. Auflage 2012. ISBN: 978-3-8266-9116-4
→ zurück zum Hauptartikel: Arduino UNO