Sie sind hier: HomeRubrikenEmbeddedEntwicklungstools

Entwicklungstools: Arduino & Co.

Fortsetzung des Artikels von Teil 1.

Eigene Programmiersprache

Die Arduino-Software besteht zum einen aus der Firmware für das Arduino-Board selbst (z.B. der Bootloader) und zum anderen aus einer integrierten Entwicklungsumgebung (IDE) und Core Libraries. Die Core Libraries sind in C und C++ geschrieben und unter Verwendung von avr-gcc und der AVR Libc compiliert. Die Entwicklungsumgebung ist Open Source, unterliegt einer GPL-V2-Lizenz und läuft unter Windows, Linux und MacOS.

Das Google-Code-Projekt [4] ist die Basis für die Entwicklung der Arduino-Plattform. Die Arduino-IDE wurde in Java geschrieben und basiert auf einer Processing-Entwicklungsumgebung. Der Quellcode für Arduino ist auf GitHub gehostet.

Nach dem Starten der Arduino-IDE öffnet sich das Hauptfenster, in dem in so genannten Sketches der Quelltext des Anwenderprogramms eingegeben und editiert werden kann. Als erstes wird man allerdings der IDE und damit dem Compiler das eingesetzte Arduino-Board mitteilen. Die serielle Kommunikation erfolgt über das USB-Interface und einen virtuellen COM-Port auf dem PC.

Quelltext in der Arduino-Entwicklungsumgebung Bildquelle: © Qiagen
Bild 3. In der Arduino-Entwicklungsumgebung wird der Quelltext editiert. Unten sind Meldungen des Compilers zu sehen.

Nach diesen vorbereitenden Schritten kann mit der Eingabe von Quelltext begonnen werden. Bild 3 zeigt den Quelltext des Programms „Hello World“ (HelloWorld.pde).  Mit diesem schlichten Programm kann die korrekte Installation der IDE, des Compilers und der anderen Komponenten der GNU-Toolchain sowie die angeschlossene Hardware überprüft werden.

Aus Bild 3 kann auch der allgemeine Programmaufbau entnommen werden. Die zwei Funktionen setup() und loop() bestimmen die Programmstruktur eines jeden Arduino-Programms. In der Funktion setup() werden Initialisierungen vorgenommen und die Funktion loop() stellt die Endlosschleife dar, die die Aktionen des eigentlichen Anwenderprogramms enthält.

Natürlich können außerhalb dieser Routinen weitere Funktionen definiert werden, die dann von setup() und/oder loop() aus aufgerufen werden können. Hier definiert die Funktion flash() das alternierende Ein-/Ausschalten des als Ausgang deklarierten Pins 13 (PB5).

Über die serielle Schnittstelle wird der String „Hello World“ ausgegeben. Anschließend erfolgt der Aufruf der Funktion flash(), die die an Pin13 angeschlossene LED ein- bzw. ausschaltet. Damit der Ablauf sichtbar bleibt, sorgt die Funktion delay(500) für eine Pause von 500 ms bis zur nächsten Aktion.

Durch ein mit COM7 verbundenes Terminalprogramm kann der ausgegebene String angezeigt werden. Das Terminalprogramm muss dabei auf die passende Baudrate eingestellt werden, hier 19.200 Baud. Über die Schaltflächen an der Oberkante des Fensters oder die Menüleiste kann der weitere Prozess der Programmbearbeitung gesteuert werden. Unterhalb des Textfensters wird der aktuelle Programmzustand angezeigt. Das Feld ganz unten ist für Ausgaben des Compilers sowie des Linkers bzw. Downloaders vorgesehen.

Hier wird die Größe des erzeugten Codes mit 1.986 von insgesamt 32.256 Bytes Programmspeicher ausgegeben. Die verbleibenden 512 Bytes des beim ATmega328 verfügbaren Programmspeichers von 32 Kbyte werden für den Bootloader beansprucht.

Arduino-Programme setzen sich aus drei Komponenten zusammen: structures, values (Variable und Konstanten) und functions. Die Arduino-Sprache gründet sich auf C/C++. Die drei Programmkomponenten sollen hier nur beispielhaft erläutert werden. Tabelle 2 zeigt einige Beispiele für die drei Programmkomponenten. Eine ausführliche Zusammenfassung und Hilfe ist mit der Language Reference auf der Arduino-Homepage [5] gegeben.

Structures
Values
Functions
void setup() true|false digitalWrite (pin, value)
void loop() high|low int analogRead (pin)
switch case unsigned long unsigned long pulseIn (pin, value)
if...else boolean long random (min,max)
do...while float map (value, fromLow, fromHigh, toLow, toHigh)
Tabelle 2. Bestandteile der Arduino-Programmiersprache