Arduino Befehlsübersicht
Programmstruktur
Ein Arduino Programm besteht immer aus den zwei Funktionen
setup(): Diese Funktion wird einmal ausgeführt. Hier können die Angaben gemacht werden, welche die Konfiguration des Programmes vornimmt.
loop(): In dieser Funktion wird das eigentliche Programm erstellt. Diese Funktion wird immer wieder ausgeführt.
void setup(){}void loop(){}
Vom Problem zum Algorithmus
- Verstehen der Problemstellung
- Entwerfen einer Lösung
- Erstellen eines Pseudocode
- Erstellen eines Struktogrammes
Struktogramm
Sequenz | |
Block | |
einfache Selektion | |
bedingte Anweisung | |
mehrfache Selektion | |
Schleife
(kopfgesteuert) | |
Schleife
(fussgesteuert) |
Darstellung von Daten
Ein Datentyp spezifiziert, wie ein bestimmtes Bitmuster interpretiert wird.
Ein Bitmuster (0010 1001) kann als:
- Ganze Zahl
- Buchstabe
- Fliesskommazahl
- etc.
interpretiert werden.
Daher werden verschiedene Datentypen benötigt.
Datentyp | Wertbereich / Speicherbedarf | Erklärungen |
byte | 0 bis 255
Speicherbedarf: 1 Byte | Niedrige Werte (und entsprechend kleiner Speicherbedarf |
int | -32'768 bis 32'767
Speicherbedarf: 2 Byte | Ganzzahlige Werte für Zähler, Schleifen oder Messwerte ohne Kommastellen |
long | -2'147'483'648 bis 2'147'483'647
Speicherbedarf: 4 Byte | Ganzzahlige Zahlen mit hohen Werten |
float | -3.4028235E+38 bis 3.4028235E+38 | Werte mit Kommastellen |
double | Entspricht dem Datentyp float. | Ist jedoch genauer (mehr Kommastellen) |
char | -238 bis 127
Speicherbedarf: 1 Byte | Wert für die Speicherung eines Zeichens |
boolean | True/False
Speicherbedarf: 1 Byte | Wert für 1/0, Ja/Nein oder Ein/Aus, also Status EIN oder AUS |
string | Länge je nach Definition
Speicherbedarf: je nach Bedarf | Zeichenketten wie Texte oder mehrere Zeichen. |
Kontrollstrukturen
Kontrollstrukturen werden verwendet, um den Ablauf eines Programms zu steuern.
Die drei grundlegenden Kontrollstrukturen sind:
- Sequenz
- Selektion
- Iteration
Sequenz
Eine Sequenz ist eine zeitlich geordnete Folge von Anweisungen
Beispiel:
digitalWrite(led,Pin, HIGH);delay(500);digitalWrite(ledPin, LOW);delay(500);
Flussdiagramm | Struktogramm | Arduino Code |
Anweisung_1;
Anweisung_2; |
Block
Oft erfordert die Syntax genau eine einzelne Anweisung. In solchen Fällen können mehrere Anweisungen in einem Block als eine Anweisung zusammen gefasst werden. Ein Block ist syntaktisch eine einzelne Anweisung.
Selektion
Bedingte Anweisung
Flussdiagramm | Struktogramm | Arduino Code |
Bedingung:
0 = false, falsch, nein
1 = true, wahr, ja (ungleich 0)
Einfache Alternative
Flussdiagramm | Struktogramm | Arduino Code |
Mehrfache Alternative
Flussdiagramm | Struktogramm | Arduino Code |
switch-case
Flussdiagramm | Struktogramm | Arduino Code |
Iterationen
Wiederholung mit vorheriger Prüfung (kopfgesteuerte Schleifen)
while-Schleife
Flussdiagramm | Struktogramm | Arduino Code |
for-Schleife
Flussdiagramm | Struktogramm | Arduino Code |
Vergleich der while- mit der for-Schleife
do - while
Wiederholung mit nachfolgender Prüfung (fussgesteuerte Schleife)
Flussdiagramm | Struktogramm | Arduino - Code |
Arduino spezifische Funktionen
Digitaler Input / Output
Werden verwendet um ein digitales Signal auszugeben
void pinMode(pin, mode)
Mit pinMode kann ein pin als Input oder Output definiert werden.
pin: Nummer des Arduino-Pin
mode: Es ist möglich den Modus auf INPUT oder OUTPUT zu setzen
Soll nun am zuvor definierten Ausgang ein Signal geschrieben werden
void digitalWrite(pin, value)
pin: Nummer des Arduino-Pin
value: HIGH (1) oder LOW(0)
Digitalen Wert lesen
int digitalRead(pin)
pin: Nummer des Arduino-Pin
Return-Wert: HIGH (1) oder LOW (0)
Beispiel:
int ledPin = 13;int inPin = 4;void setup(){pinMode(ledPin, OUTPUT);pinMode(inPin, INPUT);}void loop(){int value = digitalRead(inPin);digitalWrite(ledPin, value);}
Analoge Signale lesen / ausgeben
Lesen eines analogen Signals
Spannungsreferenz für analog Input setzen
void analogReference(type)
type: DEFAULT -> 5V; INTERNAL -> 1.1 Volt; EXTERNAL -> Referenzspannung von 0 - 5V an PIN AREF
Analogwert lesen
int analogRead(pin)
pin: Nummer des analogen InputPin (0-5); Arduino A0-A5
Returnwert: int 0-1023 (10 Bit)
Der Arduino besitzt einen 10 Bit Analog/Digital Wandler. Somit kann die Eingangsspannung durch 1024 pro bit gemessen Werden. (4.88mV)
Schreiben eines analogen Signals
PWM Wert Schreiben
void analogWrite(pin, pwm)
pin: Nummer des analogen OutputPin (0-5); Arduino A0-A5
pwm: PWM-Wert
analogWrite(5, 64);
Der PWM Wert entspricht dann der entsprechenden Pulsdauer
PWM-Wert | Tastgrad | Grafik |
0 | 0% | |
64 | 25% | |
128 | 50% | |
191 | 75% | |
255 | 100% |
Operatoren
Einstellige (unäre) arithmetische Operatoren
Operator | Beschreibung |
+A | positiver Vorzeichenoperator |
-A | negativer Vorzeichenoperator |
A++ | Postfix-Inkrementoperator |
++A | Präfix-Inkrementoperator |
A-- | Postfix-Dekrementoperator |
--A | Präfix-Dekrementoperator |
Zweistellige (binäre) arithmetische Operatoren
Operator | Beschreibung |
A + B | Additionsoperator |
A - B | Subtraktionsoperator |
A * B | Multiplikationsoperator |
A / B | Divisionsoperator |
A % B | Modulooperator (nur für ganzzahlige Typen)
Bestimmt den Rest einer ganzzahligen Division |
Zuweisungsoperator
Operator | Beschreibung |
A = B | Zuweisungsoperator |
Vergleichsoperatoren
Operator | Beschreibung |
A == B | Gleichheitsoperator |
A!=B | Ungleichheitsoperator |
A > B | Grösseroperator |
A < B | Kleineroperator |
A >= B | Grösser-Gleichoperator |
A<=B | Kleiner-Gleichoperator |
Logische Operatoren
Operator | Beschreibung | Wahrheitstabelle |
A && B | Logisch UND | |
A || B | Logisch ODER | |
!A | Logisch Nicht |
Bit-Operatoren
Operator | Beschreibung |
A & B | Bitweises UND |
A | B | Bitweises ODER |
~A | Bitweises NICHT |
A^B | Bitweises exklusives ODER (XOR) |
Schiebe Operatoren
Operator | Beschreibung |
A >> n | Rechts-Shift um n Bits
Entspricht einer Division durch 2er-Potenz |
A << n | Links-Shift um n Bits
Entspricht einer Multiplikation mit 2er-Potenz |
Funktionen
Eine Funktion ist eine Zusammenfassung von Anweisungen mit einem eigenen Namen. Innerhalt einer Funktion kann ein Problem gelöst werden, welches mehrfach im Programm auftritt. Durch das Aufrufen der entsprechenden Funktion wird der darin enthaltene Programmcode ausgeführt. Somit kann an einer Stelle im Programm das Problem gelöst werden. Dies erleichtert auch zu einem späteren Zeitpunkt die Wartung des Programmes
Funktionsdefinition
Die Funktionsdefinition definiert wie der Name sagt, die Definition. Es werden folgende Informationen definiert:
- Funktionskopf bestehend aus Rückgabetyp, Funktionsname und Parameterliste
- Rückgabetyp: Dieser Datentyp wird von der Funktion als Antwort an den Aufrufenden zurück gegeben. Soll eine Funktion keinen Wert zurück geben, wird dies mit dem Schlüsselwort void angezeigt z.B. void linie()
- Funktionsname: Bezeichnung der Funktion
- Parameterliste: Eine Liste von Werten mit denen in der Funktion gearbeitet werden soll
- Funktionsrumpf
Rückgabetyp Funktionsmae(Parameterliste){Funktionsrumpf}Beispiel einer Funktion:int ggT(int zahl1, int zahl2){ while (zahl1 != zahl2){if (zahl1 < zahl2) zahl2 = zahl2 – zahl1;elsezahl1 = zahl1 – zahl2; }return zahl1;}
Funktionsaufruf
Der Funktionsaufruf ruf die zuvor definierte Funktion auf.
Der Funktionsaufruf besteht aus dem Funktionsnamen und der Parameterliste. An der Stelle des Funktionsaufrufes wird anschliessend das Resultat (Rückgabetyp) der Funktion, angegeben.
int gTeiler = ggt(5, 7);
Das Resultat der Funktion ggt wird anschliessen in die Variable gTeiler gespeichert und kann für die weitere Verarbeitung eingesetzt werden. Wenn eine Funktion keine Rückgabe.