Arduino Programmierhandbuch PDF
Arduino Programmierhandbuch PDF
Arduino Programmier-Handbuch
Inhalt
Einleitung ................................................................................................................................... 2
1. Struktur............................................................................................................................... 4
2. Datentypen ......................................................................................................................... 9
3. Arithmetik ........................................................................................................................ 10
4. Konstanten........................................................................................................................ 12
5. Ablaufsteuerung ............................................................................................................... 13
6. Digitaler Input - Output.................................................................................................... 15
7. Analoger Input - Output ................................................................................................... 17
8. Zeit ................................................................................................................................... 18
9. Mathematisch ................................................................................................................... 19
10. Zufallsfunktionen ......................................................................................................... 19
11. Serielle Kommunikation .............................................................................................. 20
12. Anhang ......................................................................................................................... 21
Ref.:
[Link]
Bearbeitet von DK2JK
-1-
Arduino Programmier-Handbuch
Einleitung
Arduino
Arduino ist eine sogenannte "physical computing" Plattform, die auf einem simplen Input
Output Microcontrollerboard basiert und eine Entwicklungsumgebung der Processing bzw.
Wiring Programmiersprache darstellt. Mit dem Arduino knnen interaktive autarke Objekte
entwickelt werden oder das Microcontrollerboard kann mit auf dem Computer laufender
Software verbunden werden (z.B. Macromedia Flash, Processing, Max/MSP, Pure Data,
Supercollider). Derzeitig verfgbare Versionen des Arduino knnen vorgefertigt bezogen
werden. Es stehen auch smtliche Hardware Design Informationen zur Verfgung, mit dessen
Hilfe der Arduino komplett selber von hand produziert werden kann.
Das Arduino Projekt wurde mit einer ehrenhaften Erwhnung in der Kategorie "Digitale
Communities" beim Prix Ars Electronica 2006.
Implementierungen
Hardware
Ein Arduino Board besteht aus einem Atmel AVR Microcontroller (ATmega168 in neueren
Versionen und ATmega8 in lteren) und zustzlichen Komponenten die Programmer
unterbringen und mit anderen Schaltkreisen zusammenarbeiten. Jedes Board enthlt
mindestens einen 5-Volt linearen Spannungregulator und einen 16 MHz Oszilator (oder
Ceramic Resonator in einigen Fllen). Der Microcontroller ist vorprogrammiert mit einem
Bootloader, so dass ein externer Programmer nicht notwendig ist.
Auf der konzeptionellen Ebene werden alle Board ber eine serielle RS-232 Verbindung
programmiert, nur die Hardwareimplementierung unterscheidet sich dabei. Serielle Arduino
Boards besitzen einen simplen Inverter Schaltkreis, der die RS-232 Level auf TTL Level
bersetzt. Aktuelle Boards inklusive des Arduino Cecimila werden per USB programmiert,
umgesetzt mit USB-auf-Seriell Adapter Chips wie dem FTDI FT323. Einige Varianten wie
der Arduino Mini oder der inoffizielle Boarduino laden die Last der Kommunikation mit dem
Computer auf abnehmbare USB-auf-Serielle Adapter Boards oder Kabel ab.
Das Arduino Board stellt die meisten der Input/Output Pins des Controllers fr andere
Schaltkreise zur Verfgung. Der Diecimila zum Beispiel verfgt ber 14 digitale I/O Pins, 6
davon knnen analoge Pulsweitenmodulationssignale generieren und 6 analoge Eingnge.
Diese Pins sind auf der Oberseite des Boards angebracht mit weiblichen Steckern im 0.1 Zoll
Raster. Es gibt zahlreiche kommerzielle "Shields". Das sind Plug-In Boards fr verschiedene
Anwendungen die auf diesen Pins montiert werden knnen.
-2-
Arduino Programmier-Handbuch
Software
Die Arduino IDE ist eine Cross-Platform Java Applikation die als ein Programmcode Editor
und Compiler dient und auch in der Lage ist Firmware seriell zum Board zu senden.
Hardware Version
Viele zum Arduino kompatible Produkte vermeiden den Namen 'Arduino' durch eine
Abwandlung mit der Endung 'duino'. Dies ist auf eine Restriktion der Nutzung der Marke
'Arduino' zurckzufhren. Sie wurden kommerziell von anderen Herstellern verffentlicht.
Das Arduino Hardware Referenz Designs wird unter einer Creative Commons Attribution
Share-Alike 2.5 Lizenz verffentlicht und kann auf der Arduino Website runtergeladen werde.
Dateien fr Layout und Produktion fr einige Versionen der Arduino Hardware sind ebenfalls
verfgbar. Der Quellcode fr die IDE und die on-board Libraries sind ebenso verfgbar und
stehen unter der GPLv2 Lizenz.
Whrend die Hardware und Software unter der Copyleft Lizenz stehen haben die Entwickler
ihr Anliegen ausgedrckt, dass der Name 'Arduino' und Ableitungen davon exclusiv den
offiziellen Produkt vorbehalten bleiben und nicht ohne Erlaubnis verwendet werden sollen.
Das Dokument zur offiziellen Politik zur Nutzung des Arduino Names betont, dass das
Projekt offen ist die Arbeit anderer in das offizielle Produkt aufzunehmen.
Als Resultat der geschtzten Namenskonvention hat eine Gruppe von Arduino Nutzern die
Entwicklung des Arduino Decimilia zu einem eignen Projekt geforked (in einer weiten
Auslegung des Wortes) und daraus das Freeduino Board entstehen lassen. Der Name
'Freeduino' ist nicht geschtzt und kann ohne Einschrnkungen verwendet werden.
-3-
Arduino Programmier-Handbuch
1. Struktur
Der grundlegende Aufbau der Arduino Programmiersprache ist relativ einfach und teilt sich in
mindestens zwei Teile auf. Diese zwei bentigten Teile oder Funktionen umschliessen Blcke
von Anweisungen.
void setup()
{
anweisungen;
}
void loop()
{
anweisungen;
}
Hierbei ist setup() die Vorbereitung und loop() ist die Ausfhrung. Beide Funktionen sind
notwendig damit das Programm ausgefhrt werden kann.
Die Setup Funktion sollte der Variablen Definition folgen, die noch davor aufgefhrt werden
muss. Setup muss als erste Funktion in einem Programm druchlaufen werden. Es wird nur
einmal ausgefhrt und dient dem Setzen von PinMode oder der Initiierung der seriellen
Kommunikation.
Nach der setup() Funktion folgt die loop() Funktion. Sie beinhaltet Programmcode, der
kontinuierlich in einer unendlichen Schleife ausgefhrt wird - Eingnge auslesen, Ausgnge
triggern, etc. Diese Funktion ist der Kern von allen Arduino Programmen und erledigt die
Hauptarbeit.
setup()
Die setup() Funktion wird einmalig aufgerufen wenn das Programm startet. Benutze diese
Funktion um PinModes zu setzen oder die serielle Kommunikation zu starten.
Die setup() Funktion muss in jedem Programm vorkommen, auch wenn sie keine
Anweisungen enthlt.
void setup()
{
pinMode(pin, OUTPUT); // 'pin' als Ausgang definieren
}
loop()
Nach dem Durchlaufen der setup() Funktion macht die loop() Funktion genau das was ihr
Name vermuten lsst und luft in einer endlosen Schleife. Damit wird dem Programm
ermglicht mit dem Arduino Board ber nderungen, Reaktionen und Kontrollen zu
interagieren.
-4-
Arduino Programmier-Handbuch
void loop()
{
digitalWrite(pin, HIGH); // schaltet 'pin' ein
delay(1000); // Pause fr eine Sekunde
digitalWrite(pin, LOW); // schaltet 'pin' aus
delay(1000); // Pause fr eine Sekunde
}
Funktionen
Eine Funktion ist ein Block von Programmcode, der einen Namen hat und eine Reihe von
Anweisungen, die beim Aufruf der Funktion ausgefhrt werden. Die Funktionen void setup()
und void loop() wurden bereits erklrt. Es gibt noch weitere eingebaute Funktionen, die spter
behandelt werden.
Typ FunktionsName(parameter)
{
anweisungen;
}
int delayVal()
{
int v; // erstelle temporre Variable 'v'
v = analogRead(pot); // lese Potentiometer Wert
v /= 4; // Umrechnen von 0-1023 auf 0-255
return v; // errechneten Wert zurckgeben
}
{} geschweifte Klammern
Geschweifte Klammern (auch ' geschwungene Klammern'genannt) definieren den Anfang und
das Ende von Funktions- und Anweiungsblcken so wie bei der '
void loop()'Funktion und
auch bei der '
for'und '
if'Anweisung.
typ funktion()
{
anweisungen;
}
-5-
Arduino Programmier-Handbuch
; Semikolon
Ein Semikolon muss am Ende einer Anweisung verwendet werden und dient zur Trennung
der Elemente eines Programmes.
Ein Semikolon wird auch werwendet um die Elemente einer '
'
for'
'Schleife zu trennen.
Bemerkung: Das Vergessen eines Semikolons am Ende einer Zeile fhrt zu einem Fehler im
Kompiler. Die Fehlerbeschreibung kann dabei sehr eindeutig sein und auf das fehlende
Semikolon direkt hinweisen, das muss aber nicht der Fall sein. Wenn eine undurchschaubarer
oder scheinbar unlogischer Fehler gemeldet wird, sollte deswegen als erstes fehlende
Semikolons in der Nhe des gemeldeten Fehlers ergnzt werden.
Block Kommentare oder mehrzeilige Kommentare sind Textbereiche die vom Programm
irgnoriert werden. Sie werden fr lngere Beschreibungen oder Kommentare verwendet und
helfen anderen Autoren Programmteile zu verstehen. Sie fangen mit /* an und enden mit */
und knnen mehrere Zeilen umfassen.
Weil Kommentare vom Programm ignoriert werden und damit keinen Speicherplatz
verbrauchen sollten sie grozgig verwendet werden. Mit Block Kommentaren kann man
auch ganze Programmteile zum Debuggen ungltig machen.
Bemerkung: Man kann einzeilige Kommentare in einen Block Kommentar integrieren. Aber
es ist nicht mglich einen zweiten Block Kommentar zu einzuschliessen.
-6-
Arduino Programmier-Handbuch
// Einzeilige Kommentare
Einfache einzeilige Kommentare werden mit einem // am Anfang der Zeile definiert und
enden mit dem Ende der Zeile. Sie werden vom Programm ignoriert und verbrauchen keinen
Speicherplatz.
3. Variablen
Eine Variable ist die Benennung eines numerischen Wertes mit einem Namen und
Speicherplatz fr die sptere Verwendung in einem Programm. Wie der Name schon
vermuten lsst kann der Wert der Variablen kontinuierlich verndert werden, im Gegensatz zu
Konstanten deren Wert im Programablauf konstant bleibt. Eine Variable muss deklariert
werden und optional mit einem Wert versehen werden. Das folgende Beispiel deklariert eine
Variable '
inputVariable'und ordnet ihr dann den Wert vom analogen Pin 2 zu:
'
inputVariable'ist die Variable selber. Die erste Zeile erklrt, dass ihr Datentyp '
int'ist, das ist
der Kurzausdruck fr Integer. Die zweite Zeile gibt der Variablen den Wert des analogen Pin
2. Damit wird der Wert des Pins berall im Code verfgbar.
Wenn der Wert einer Variablen zugeordnet oder verndert wird kann man seine Wert testen,
um zu sehen ob er bestimmte Bedingungen erfllt. Ein Beispiel wie man mit Variablen
sinnvoll arbeiten kann zeigt der folgende Code. Hier wird getestet ob 'inputVariable'weniger
als 100 ist. Ist dies der Fall wird der Wert 100 der '
inputVariablen'zugeordnet und das
Programm verwendet diesen Wert als Pause (delay). Der minimale Wert von ' inputVariable'
ist somit in jedem Fall 100.
-7-
Arduino Programmier-Handbuch
Variablen deklaration
Alle Variables mssen vor der Benutzung deklariert werden. Eine Variable zu deklarieren
bedeutet ihren Typ wie z.B. int, long, float, etc. zu definieren, einen Namen zu vergeben und
optional einen Anfangswert. Dies muss nur einmal im Programm vorgenommen werden.
Danach kann der Wert zu jedem Zeitpunkt durch Berechnungen oder verschiedenste
Zuordnungen gendert werden.
int inputVariable = 0;
Eine Variable kann an vielen Orten im Programm deklariert werden. Der Ort der Deklaration
bestimmt welche Programmteile Zugriff auf die Variable haben.
Variablen Geltungsbereich
Eine Variable kann am Anfang des Programmes vor ' void setup()'deklariert werden, lokal
innerhalb von Funktionen und manchmal auch innerhalb eine Anweisungsblocks wie zum
Beispiel einer Schleife. Wo die Variable deklariert wird bestimmt ihren Geltungsbereich, oder
die Fhigkeit bestimmerte Programmteile auf den Wert der Variablen zuzugreifen.
Eine globale Variable kann von jeder Funktion und Anweisung des Programmes gesehen und
benutzt werden. Diese Variable wird zu beginn des Programmes deklariert, noch vor der
setup() Funktion.
Eine lokale Variable wird nur innerhalb einer Funktion oder Scheife definiert. Sie ist nur
sichtbar und nutzbar innerhalb der Funktion in der sie deklariert wurde. Deswegen ist es
mglich zwei oder mehr Variaben mit dem selben Namen in verschiedenen Teilen des
Programms unterschiedliche Werte enhalten. Durch die Sicherstellung, dass nur die Funktion
selber Zugriff auf seine eigenen Variablen hat, wird das Programm vereinfacht und man
reduziert das Risiko von Fehlern.
Das folgende Beispiel zeigt anschaulich wie man Variablen auf verschiedene Weisen
deklarieren kann und zeigt ihre Geltungbereiche.
void loop()
{
for (int i=0; i<20;) // 'i' ist nur sichtbar
{ // innerhalb der for-Schleife
i++;
}
float f; // 'f' ist nur sichtbar
} // innerhalb der for-Schleife
-8-
Arduino Programmier-Handbuch
2. Datentypen
byte
Byte steichert einen 8-bit numerischen, ganzzahligen Wert ohne Dezimalkomma. Der Wert
kann zwischen 0 und 255 sein.
int
Integer sind der verbreitetste Datentyp fr die Speicherung von ganzzahligen Werten ohne
Dezimalkomma. Sein Wert hat 16 Bit und reicht von -32.767 bis 32.768.
long
Datentyp fr lange Integer mit erweiterer Gre, ohne Dezimalkomma, gespeichert in einem
32-bit Wert in einem Spektrum von -2,147,483,648 bis 2,147,483,647.
float
arrays
Ein Array ist eine Sammlung von Werten auf die mit einer Index Nummer zugegriffen wird.
Jeder Wert in dem Array kann aufgerufen werden, indem man den Namen des Arrays und die
Indexnummer des Wertes abfragt. Die Indexnummer fngt bei einem Array immer bei 0 an.
Ein Array mus deklariert werden und optional mit Werten belegt werden bevor es genutzt
werden kann.
-9-
Arduino Programmier-Handbuch
Genau so ist es mglich ein Array zuerst mit Datentyp und Gre zu deklarieren und spter
einer Index Position einen Wert zu geben.
Um den Wert eines Arrays auszulesen kann man diesen einfach einer Variablen mit angabe
des Arrays und der Index Postion zuordnen.
Arrays werden oft fr Schleifen verwendet, bei dem der Zhler der Schleife auch als Index
Position fr die Werte im Array verwendet wird. Das folgende Beispiel nutzt ein Array um
eine LED zum flickern zu bringen. Mit einer for-Schleife und einem bei 0 anfangenden Zhler
wird eine Indexpostion im Array ausgelesen, an den LED Pin gesendet, eine 200ms Pause
eingelegt und dann das selbe mit der nchsten Indexpostion durchgefhrt.
void loop()
{
for(int i=0; i<7; i++) // Schleife gleicht der Anzahl
{ // der Werte im Array
analogWrite(ledPin, flicker[i]); // schreibt den Indexwert auf die LED
delay(200); // 200ms Pause
}
}
3. Arithmetik
Arithmetische Operatoren umfassen Addition, Subtraktion, Multiplikation und Division. Sie
geben die Summe, Differenz, das Produkt oder den Quotienten zweier Operatoren zurck.
y = y + 3;
x = x - 7;
i = j * 6;
r = r / 5;
- 10 -
Arduino Programmier-Handbuch
Die Operation wird unter Beibehaltung der Datentypen durchgefhrt. 9 / 4 wird so zum
Beipiel zu 2 und nicht 2,25, da 9 und 4 Integer sind und keine Nachkommastellen
untersttzen. Dies bedeuted auch, dass die Operation berlaufen kann wenn das Resultat
grer ist als der Datentyp zulsst.
Wenn die Operanden unterschiedliche Datentypen haben wird der grere Typ verwendet.
Hat zum Beispiel eine der Nummern (Operanden) den Datentyp 'float'und der andere '
int'
, so
wir Fliesskomma Mathematik zur Berechnung verwendet.
Bemerkung:Whle variable Gren die gro genug sind um die Werte der Ergebnisse zu
speichern. Sei Dir bewusst an welcher Stelle die Werte berlaufen und auch was in der
Gegenrichtung passiert. z.B. bei (0 - 1) oder (0 - - 32768). Fr Berechnungen die Brche
ergeben sollten immer 'float'Variablen genutzt werden. Allerdings mit dem Bewustsein der
Nachteile: Groer Speicherbedarf und langsame Geschwindigkeit der Berechnungen.
Nutze den Form Operator z.B. (int)myFloat um einen Variablen Typen spontan in einen
anderen zu verwandeln. Zum Beispiel wird mit i = (int)3.6 die Variable i auf den Wert 3
setzen.
gemischte Zuweisungen
Bemerkung: Zum Beispiel fhrt x *= 3 zur Verdreifachung des alten Wertes von '
x'und weist
der Variablen '
x'des Ergebnis der Kalkulation zu.
vergleichende Operatoren
Der Vergleich von Variablen oder Konstanten gegeneinander wird oft in If-Anweisungen
durchgefhrt, um bestimmter Bedingungen auf Wahrheit zu testen. In den Beispielen auf den
folgenden Seiten wird ?? verwendet um eine der folgenen Bedingungen anzuzeigen:
logische Operatoren
- 11 -
Arduino Programmier-Handbuch
Logisch AND:
if (x > 0 && x < 5) // nur WAHR wenn beide
// Ausdrcke WAHR sind
Logisch OR:
if (x > 0 || y > 0) // WAHR wenn einer der
// Ausdrcke WAHR ist
Logisch NOT:
if (!x > 0) // nur WAHR wenn der
// Ausdruck FALSCH ist
4. Konstanten
Die Arduino Programmiersprache hat ein paar vordefinierte Werte, die man auch Konstanten
nennt. Sie machen den Programmcode einfacher lesbar. Konstanten werden in Gruppen
unterteilt.
true/false
Diese sind Boolean Konstanten die logische Level definieren. FALSE ist einfach als 0 (Null)
definiert, whrend TRUE oft als 1 deifniert wird. Es kann aber alles sein ausser Null. Im
Sinne von Boolean ist auch -1,2 und -200 als TRUE definiert.
if (b == TRUE);
{
machEtwas;
}
high/low
Diese Konstanten definieren Pin Level als HIGH oder LOW und werden beim Lesen oder
Schreiben auf digital Pins verwendet. High ist als Logiclevel 1, ON oder 5 Volt definiert,
whrend LOW als Logiclevel 0, OFF oder 0 Volt definiert ist.
digitalWrite(13, HIGH);
input/output
Konstanten die in der pinMode() Funktion benutzt werden und einen digitalen Pin entweder
als INPUT oder OUTPUT definieren.
pinMode(13, OUTPUT);
- 12 -
Arduino Programmier-Handbuch
5. Ablaufsteuerung
if
Die If-Abfrage testet ob eine bestimmte Bedingung wahr ist oder nicht. Bei einem analogen
Wert kann dies das Erreichen eines bestimmten Levels sein. Ist dies der Fall, so werden
Anweisungen innerhalb der geschweiften Klammer ausgefhrt. Ist diese Bedingung nicht
erfllt werden die Anweisungen innerhalb der Klammer bersprungen. Das Format fr eine
If-Abfrage ist folgende:
if (someVariable ?? value)
{
doSomething;
}
Das oben vorgestellte Beispiel vergleicht 'someVariable'mit einem anderen Wert 'value'
, der
entweder eine Variable oder Konstante sein kann. Wenn der Vergleich oder die Bedingung
wahr ist werden die Anweisungen innerhalb der Klammern ausgefhrt, in diesem Beispeil
'
doSomething' . Wenn nicht, wird der Teil bersprungen und es geht nach den Klammern
weiter in der Ausfhrung des Programmcodes.
if... else
if (inputPin == HIGH)
{
doThingA;
}
else
{
doThingB;
}
'
else'kann auch noch weitere ' if'Abfragen enthalten, so dass mehrfache Test zur selben Zeit
stattfinden knnen. Es ist sogar mglich eine unbegrenzte Anzahl von diesen ' else'
Abzweigungen zu nutzen. Allerdings wird je nach den Bedingungen nur ein Set von
Anweisungen ausgefhrt:
- 13 -
Arduino Programmier-Handbuch
else
{
doThingC;
}
Bemerkung: Eine If-Abfrage testet ob eine Bedingung innerhalb der Klammer wahr oder
falsch ist. Diese Bedingung kann jedes gltige C Statement sein, wie in unserem ersten
Beispiel if (inputPin == HIGH). In diesem Beispiel prft die if Abfrage nur ob der definierte
Eingang den Logic level HIGH hat (+5 Volt).
for
Die '
for'Schleife wird verwendet um einen Block von Anweisungen in geschweiften
Klammern eine festgelegt Anzahl von Wiederholungen durchlaufen zu lassen. Ein
Erhhungzhler wird oft verwendet um die Schleife zu ansteigen zu lassen und zu beenden.
Es gibt im Header der '
for'Schleife drei Elemente, getrennt durch Semikolon '
;'
.
Die Initialisierung einer lokalen Variablen, einem ansteigenden Zhler, passiert als erstes und
nur einmalig. Bei jedem Durchlaufen der Schleife wird die Bedingung an der zweiten Stelle
getestet. Wenn die Bedingung wahr ist luft die Schleife weiter und die folgenden Ausdrcke
und Anweisungen werden ausgefhrt und die Bedingung wird erneut berprft. Ist die
Bedingung nicht mehr wahr so endet die Schleife.
Das folgende Beispiel startet mit einem Integer Wert 'i'bei 0, die Bedingung testet ob der
Wert noch kleiner als 20 ist und wenn dies wahr ist so wird 'i'um einen Wert erhht und die
Anweisungen inenrhalb der geschweiften Klammern werden ausgefhrt:
while
'
while'Schleifen werden unbegrenzt wiederholt und laufen unendlich bis eine bestimmte
Bedingung innerhalb der Klammer falsch ist. Etwas muss die zu testende Variable ndern
oder die Schleife endet nie. Dies kann im Code passieren, wie eine ansteigende Variable oder
von externen Werten, wie einem Sensor Test erfolgen.
- 14 -
Arduino Programmier-Handbuch
do... while
Die '
do...while'Schleife ist eine endgesteuerte Schleife die hnlich funktioniert wie die '
while'
Schleife. Der Unterschied ist der Test der Bedingung am Ende der Schleife. Somit luft die
Schleife immer mindestens einmal.
do
{
doSomething;
} while (someVariable ?? value);
do
{
x = readSensors(); // ordnet den Wert von
// readSensors() 'x' zu
delay (50); // Pause fr 50ms
} while (x < 100); // Schleife laeuft weiter bis 'x' weniger als 100
ist
Wird in '
void setup()'benutzt um einen speziellen Pin entweder als Eingang oder Ausgang zu
konfigurieren.
Arduino digitale Pins sind standardmig Eingnge, weshalb sie nicht extra als Eingnge mit
'
pinMode()'festgelegt werden mssen. Als Eingang konfigurierte Pins haben einen Zustand
hoher Impendanz.
Es gibt im ATmega Chip auch komfortable 20 k ' Pullup'Widerstnde die per Software
zugngig sind. Auf diese eingebauten '
Pullup'Widerstnde kann in folgender Weise
zugegriffen werden:
- 15 -
Arduino Programmier-Handbuch
Als Ausgang konfigurierte Pins sind in einem Zustand geringer Impendanz und knnen mit
maximal 40 mAmpere Strom von angeschlossenen Elementen und Schaltkreisen belastet
werden. Dies ist genug um eine LED aufleuchten zu lassen (seriellen Widerstand nicht
vergessen), aber nicht genug um die meisten Relais, Magnetspulen oder Motoren zu
betreiben.
Kurzschlsse an den Arduino Pins genau wie zu hohe Stromstrken knnen den Output Pin
oder gar den ganzen ATmega Chip zerstren. Aus dem Grund ist es eine gute Idee einen
Ausgangspin mit externen Elementen in Serie mit einem 470 oder 1K Widerstand zu
schalten.
digitalRead(pin)
'
digitalRead(pin)'liest den Wert von einem festgelegten digitalen Pin aus, mit dem Resultat
entweder HIGH oder LOW. Der Pin kann entweder als Variable oder Konstante festgelegt
werden (0-13).
digitalWrite(pin,value)
Gibt entweder den Logiclevel HIGH oder LOW an einem festgelegten Pin aus. Der Pin kann
als Variable oder Konstante festgelegt werden (0-13).
Das folgende Beispiel liest einen Taster an einem digitalen Eingang aus und schaltet eine
LED eine wenn der Taster gedrckt wird:
void setup()
{
pinMode(led, OUTPUT); // legt Pin 13 als Ausgang fest
pinMode(pin, INPUT); // legt Pin 7 als Eingang fest
}
void loop()
{
value = digitalRead(pin); // setzt 'value' gleich mit
// dem Eingangspin
digitalWrite(led, value); // setzt 'led' gleich mit dem
} // Wert des Tasters
- 16 -
Arduino Programmier-Handbuch
Liest den Wert eines festgelegten analogen Pins mit einer 10 Bit Auflsung aus. Diese
Funktion ist nur fr Pins (0-5) verfgbar. Die resultierenden Integer Werte haben ein
Spektrum von 0 bis 1023.
Bemerkung: Analoge Pins mssen im Gegensatz zu digitalen nicht zuerst als Eingang oder
Ausgang deklariert werden.
analogWrite(pin, value)
Ein Wert 0 generiert eine gleichmige Spannung von 0 Volt an einem festgelegten Pin; Ein
Wert von 255 generiert eine gleichmige Spannung von 5 Volt an eine festgelegten pin. Fr
Werte zwischen 0 und 255 wechselt der Pin sehr schnell zwischen 0 und 5 Volt - je hher der
Wert, desto lnger ist der Pin HIGH (5 Volt). Bei einem Wert von 64 ist der Pin zu
dreivierteln der Zeit auf 0 Volt und zu einem Viertel auf 5 Volt. Ein Wert von 128 fhrt dazu,
dass die Ausgangsspannung zur Hlfte der Zeit auf HIGH steht und zur anderen Hlfte auf
LOW. Bei 192 misst die Spannung am Pin zu einer Viertel der Zeit 0 Volt und zu dreivierteln
die vollen 5 Volt.
Weil dies eine hardwarebasierte Funktion ist, lufte die konstante Welle unabhngig vom
Programm bis zur nchsten nderung des Zustandes per analogWrite (bzw. einem Aufruf von
digitalRead oder digitalWrite am selben Pin).
Bemerkung: Analoge Pins mssen im Gegensatz zu digitalen Pins nicht zuvor als Eingang
oder Ausgang deklariert werden.
Das folgenden Beispiel liest einen analogen Wert von 'pin', rechnet den Wert per Division
durch 4 um und gibt ihn dann als PWM Signal an ' led'aus.
- 17 -
Arduino Programmier-Handbuch
void loop()
{
value = analogRead(pin); // setzt 'value' gleich mit 'pin'
value /= 4; // wandelt 0-1023 in 0-255 um
analogWrite(led, value); // gibt das PWM Signal an 'led' aus
}
8. Zeit
delay(ms)
Pausiert ein Programm fr die Dauer der Zeit angegeben in Millisekunden, wobei 1000 = 1
Sekunde ist.
millis()
Bemerkung: Dieser Wert wird nach etwa 9 Stunden berlaufen und wieder bei Null anfangen.
- 18 -
Arduino Programmier-Handbuch
9. Mathematisch
min(x, y)
Berechnet das Minimum von zwei Werten irgendeines Datentypes und gibt den kleineren
Wert zurck.
max(x, y)
Berechnet das Maximum von zwei Werten irgendeines Datentypes und gibt den hheren Wert
zurck.
10. Zufallsfunktionen
randomSeed(seed)
Der Arduino ist selber nicht in der Lage eine wirklich Zufallswerte zu produzieren. Mit
randomSeed() kann eine Variable als ' seed'verwendet werden um bessere Zufallsergebnisse
zu erhalten. Als '
seed'Variable oder auch Funktion knnen so zum Beispiel millis() oder
analogRead() eingesetzt werden um elektrisches Rauschen durch den Analogpin als Ausgang
fr Zufallswerte zu nutzen.
random(min, max)
Die random Funktion erlaubt die Erzeugung der pseudo-zuflligen Werte innerhalb eines
definierten Bereiches von minimum und maxium Werten.
Das folgende Beispiel erzeugt einen Zufallswert zwischen 0 und 255 und gibt ihn als PWM
Signal auf einem PWM Pin aus.
- 19 -
Arduino Programmier-Handbuch
void loop()
{
randomSeed(millis()); // verwendet millis() als seed
randNumber = random(255); // Zufallsnummer im Bereich von 0-255
analogWrite(led, randNumber); // PWM Signal als Output
delay(500); // halbe Sekunde Pause
}
'
[Link](rate)'ffnet den seriellen Port und setzt die Baud Rate (Datenrate) fr die
serielle bertragung fest. Die typische Baud Rate mit dem Computer ist 9600 Baud. Andere
Geschwindigkeiten werden auch untersttzt.
void setup()
{
[Link](9600); // oeffnet seriellen Port
} // setzt die Datenrate auf 9600 bps
Bemerkung: Wenn eine serielle Kommunikation verwendet, so knnen die digitalen Pins 0
(RX) und 1 (TX) nicht zur selben Zeit verwendet werden.
[Link](data)
Schreibt Daten zum seriellen Port, gefolgt von einem automatischen Zeilenumbruch als
Carrier Return und Linefeed. Dieser Befehl hat die selbe Form wie '
[Link]()'
, ist aber
einfacher auf dem seriellen Monitor zu lesen.
Das folgende einfache Beispiel liest einen Wert vom analogen Pin 0 aus und sendet die Daten
an den Computer einmal pro Sekunde.
void setup()
{
[Link](9600); // setzt die Datenrate auf 9600 bps
}
void loop()
{
[Link](analogRead(0)); // sendet den Analogwert
delay(1000); // pausiert fuer 1 Sekunde
}
- 20 -
Arduino Programmier-Handbuch
12. Anhang
Digitaler Ausgang
Digitaler Eingang
Dies ist die einfachste Form eines Einganges mit nur zwei mglichen Zustnden: ein oder aus.
Dieses Beispiel liest einen einfachen Schalter oder Taster an Pin 2 aus. Wenn der Schalter
geschlossen ist und der Einganspin HIGH ist wird die LED eingeschaltet.
void setup()
{
pinMode(ledPin, OUTPUT); // deklariert LED als Ausgang
pinMode(inPin, INPUT); // deklariert Schalter als Eingang
}
void loop()
- 21 -
Arduino Programmier-Handbuch
{
if (digitalRead(inPin) == HIGH) // prfen ob die der Eingang HIGH ist
{
digitalWrite(ledPin, HIGH); // schaltet die LED ein
delay(1000); // Pause fuer 1 Sekunde
digitalWrite(ledPin, LOW); // schaltet die LED aus
delay(1000); // Pause fuer 1 Sekunde
}
}
Machmal ist es notwendig mehr als die 40 Milliampere der Ausgnge des Arduino zu
kontrollieren. In diesem Fall kann ein MOSFET oder Transistor benutzt werden um hhere
Stromstrken zu schalten. Das folgende Beispiel schaltet einen MOSFET etwa 5 mal pro
Sekunde ein und aus.
Bemerkung: Die Schaltung zeigt einen Motor und eine Schutzdiode, es knnen aber andere
nicht-induktive Ladungen ohne die Verwendung der Diode genutzt werden.
void setup()
{
pinMode(outPin, OUTPUT); // setzt Pin5 als Ausgang
}
void loop()
{
for (int i=0; i<=5; i++) // Schleife wird 5 mal durchlaufen
{
digitalWrite(outPin, HIGH); // schaltet MOSFET an
delay(250); // Pause 1/4 Sekunde
digitalWrite(outPin, LOW); // schaltet MOSFET aus
delay(250); // Pause 1/4 Sekunde
}
delay(1000); // Pause 1 Sekunde
}
- 22 -
Arduino Programmier-Handbuch
Pulsweiten Modulation (PWM) ist eine Methode um analoge Ausgnge zu simulieren, indem
man die Ausgangsspannung pulsiert. Damit kann man zum Beispiel eine LED heller oder
dunkler werden lassen oder spter einen Servomotor kontrollieren. Das folgende Beispiel lsst
eine LED mit Hilfe einer Schleife langsam heller und dunkler werden.
void loop()
{
for (int i=0; i<=255; i++) // aufsteigender Wert fr i
{
analogWrite(ledPin, i); // setzt den Helligkeitswert auf i
delay(100); // Pause fuer 100ms
}
Potentiometer Eingang
Mit einem Potentiometer und einem der analog-digital Converter (ADC) Eingnge des
Arduinos ist es mglich analoge Werte von 0-1024 zu lesen. Das folgende Beispiel verwendet
ein Potentiometer um die Blinkrate einer LED zu kontrollieren.
void setup()
{
pinMode(ledPin, OUTPUT); // deklariere ledPin als OUTPUT
}
void loop()
{
digitalWrite(ledPin, HIGH); // schaltet ledPin ein
- 23 -
Arduino Programmier-Handbuch
Servo Output
- 24 -
Arduino Programmier-Handbuch
Hobby-Servos sind eine geschlossene Motoreinheit, die sich in der Regel in einem 180-Grad-
Winkel bewegen lassen. Es braucht nur einen Puls der alle 20ms gesendet wird. In diesem
Beispiel wird eine servoPulse-Funktion genutzt um das Servo von 10-170 Grad und wieder
zurck zu bewegen.
- 25 -