2 Arduino-Software-Entwicklung
Nachfolgend werden die verschiedenen Programmierelemente vorgestellt, auf die im Verlauf dieses Buchs immer wieder zurückgegriffen wird. Wenn Sie bereits Erfahrung mit der Programmierung in C haben, wird Ihnen das Programmieren mit Arduino dank der vielen Gemeinsamkeiten nicht schwerfallen. Falls Programmierung neu für Sie ist, erhalten Sie in diesem Kapitel eine Einführung in die wichtigsten Konzepte. Nur wenn Sie die Grundlagen der Arduino-Programmierung beherrschen, bleibt Ihr Code übersichtlich und nachvollziehbar. Außerdem werden Sie nachfolgend die wichtigsten Programmstrukturen erarbeiten, damit Sie sich später auf die Bibliotheken konzentrieren können. Bibliotheken sind Sammlungen von Klassen, Typen oder Funktionen, die über Schlüsselwörter aufgerufen werden können. Mit Bibliotheken können Sie Ihrem Programm vorgefertigte Funktionalität hinzufügen. Damit ermöglichen Bibliotheken das Prinzip der modularen Wiederverwendbarkeit von Code. Hier werden wir uns schwerpunktmäßig mit den Bibliotheken NewSoftSerial, LCD Library und TinyGPS befassen.
2.1 Erste Schritte mit setup und loop()
Ohne setup() und loop() kann kein Arduino-Programm ordnungsgemäß ausgeführt werden. Die Implementierung der beiden Funktionen erfolgt nach diesem Schema:
// Einfaches Arduino-Programm void setup() { // E/As hier einrichten } void loop() { // Funktionalität }
Unter setup() richten Sie E/A-Ports wie LEDs, Sensoren, Motoren und serielle Ports ein. Dieser Vorgang ist wichtig, denn um die Pins auf dem Arduino-Board nutzen zu können, müssen Sie die gewünschten Pins vorher »reservieren«.
loop() enthält den gesamten Code zur Steuerung der E/A-Ports. Hier legen Sie z. B. eine bestimmte Geschwindigkeit für Ihren Motor fest. Das Einrichten und Steuern der E/As wird in den nächsten Abschnitten näher erläutert.
Arduino-Programme enthalten außerdem diverse Unterfunktionen. Dabei handelt es sich um nützliche Sonderfunktionen, die Sie innerhalb von loop()-Anweisungen oder in den entsprechenden Unterfunktionen aufrufen können. Um eine Unterfunktion verwenden zu können, müssen Sie die Funktion zuerst am Anfang des Programms initialisieren. Diese erste Deklaration nennt sich Funktionsprototyp.
Beispiel:
// Funktionsprototyp void delayLED(); void setup() { } void loop() { } // Unterfunktion void delayLED() { // Code, der im Anschluss an die loop()-Struktur ausgeführt wird }
Initialisieren von Variablen
Variablen sind die grundlegendsten Programmierbausteine. Mit ihnen lassen sich Daten zwischen einzelnen Programmbestandteilen übergeben. Alle Programme in diesem Buch verwenden Variablen. In der Arduino-Programmiersprache stehen verschiedene Variablentypen zur Verfügung.
unsigned int
| 5
| 0 bis 65.535 |
long
| 512
| -2.147.483.648 bis 2.147.483.647 |
unsigned long
| 3.000.000
| 0 bis 4.294.967.295 |
float
| 2,513
| –3,4028235E+38 bis 3,4028235E+38 |
double
| 2,513
| –3,4028235E+38 bis 3,4028235E+38
|
Nachdem Sie nun wissen, welche Variablentypen es gibt, gilt es, diese Variablen zu deklarieren. Für die Deklaration der Variablen müssen Sie wissen, in welchem Bereich sie verwendet werden können. Anschließend müssen Sie den Bereich angeben (deklarieren), der Ihren Anforderungen entspricht. Hier wird zwischen zwei grundsätzlichen Bereichen für Variablen unterschieden: lokal und global. Eine lokale Variable lässt sich nur innerhalb des für sie definierten Bereichs verwenden. Z. B. werden in einer Schleife die dort deklarierten Variablen nur innerhalb der Klammern verwendet, die Variablen sind also für diese Schleife lokal. Eine globale Variable kann von jedem beliebigen Ort des Programms aufgerufen werden. Zur Definition einer globalen Variable müssen Sie die Variable zu Beginn des Programms initialisieren. Das folgende Programm zeigt, wie Sie lokale und globale Variablen initialisieren:
// Variable initialisieren int x; // Diese Variable wird global deklariert und kann im // gesamten Programm aufgerufen...