While Schleife – Keiner weiss wie oft

While-Schleifen kommen immer dann zur Anwendung, wenn nicht bekannt ist, wie oft die Schleife durchlaufen werden muss, bis die Bedingung erfüllt ist.
Sie werden solange durchlaufen, bis der der Ausdruck innerhalb der Klammern FALSE wird. Innerhalb des Schleifenblocks muss sich der Wert des zu prüfenden Ausdrucks ändern, ansonsten wird die Schleife endlos durchlaufen.
Sie gehört zu den kopfgesteuerten Schleifen, weil die Bedingung vor dem Eintritt in den Schleifenkörper geprüft wird.

Aufbau der while-Scheife

Flussdiagramm while Schleife

Arduino while Schleife

Code-Beispiel

1
2
3
4
5
6
int x = 1;
while (x < 10) // Solange x kleiner 500 ist...
{
//mach das, was zwischen den geschweiften Klammern steht.
x++; // erhöhe x um 1
}

Was passiert?

Zeile 1: Hier wird mittels while(x < 10) geprüft, ob der Wert der Variablen x kleiner 10 ist.
Solange das Ergebnis der Prüfung TRUE (wahr), wird der Schleifenkörper durchlaufen (Zeilen 4-6) .
Anstatt der Variablen x könnte auch der Messwert eines Fühlers innerhalb der Bedingung prüfen, ob der Wert über- oder unterschreitten wird.
In Zeile 5 wird der Wert von x durch den Inkrementoperator ++ um 1 erhöht.
Ist die Variable größer oder gleich 10 ist die Bedingung der while-Schleife FALSE wird die Schleife nicht weiter ausgeführt. Das Programm wird nach der schließenden Klammer fortgesetzt.

do-Schleife

Die do-Schleife ist das Gegenstück zu while-Schleife. Das heißt sie arbeitet fast genauso wie eine while-Schleife, nur mit einer Ausnahme: die Bedingung wird erst am Ende der Schleife geprüft wird. Dieser Schleifentyp wird auch als fußgesteuerte Schleife bezeichnet und durchläuft den Schleifenkörper wegen dieses Aufbaus in jeden Fall mindestens einmal.

Struktur der do-schleife

Flussdiagramm while Schleife

Arduino do Schleife

Das folgende Code-Beispiel zeigt, das der Schleifenkörper trotz der nicht erfüllten Bedingung für (x < 0), wegen seines fußgesteuerten Aufbaus dennoch einmal durchlaufen wird.

Code-Beispiel

1
2
3
4
5
6
7
8
int x = 1;
do{
// hier könnten noch viel mehr Anweisungen stehen.
//mach das, was zwischen den geschweiften Klammern steht.
Serial.println(" Der Schleifenkörper wurde soeben durchlaufen");
x++;
} while (x < 0 );
Serial.println(x);

Was passiert?

In Zeile 1 wird die Variable x initialisiert und erhält dabei den Wert 1.
Der Sketch setzt das Programm in Zeile 2 fort und tritt in die Schleife ein.
In Zeile 5 teilt uns der Sketch über den seriellen Monitor mit, dass gerade der Schleifenkörper durchlaufen wird.
In Zeile 6 wird der Wert von x durch den Inkrementoperator ++ um 1 erhöht. Der Wert von x ist nun 2
In Zeile 7 ist das Ende der Schleife erreicht. Hier wird mittels while(x < 0) geprüft, ob die Bedingung TRUE ist. In unserem Fall ist sie FALSE, denn x ist größer als 0. Ein erneutes Abarbeiten der Schleife wird dadurch verhindert.
Das Programm setzt die Verarbeitung in Zeile 8 mit der Ausgabe des aktuellen Wert von x fort.

Variablen – der Einstieg

Variablen sind, um ein Bild zu gebrauchen, „Behälter“ die Daten aufnehmen können. Sämtliche Variablen, die in einem Programm verwendet werden, repräsentieren Platz im Speicher des Arduinos in den Zahlen, Zeichen und Zeichenketten, z.B. Wörter oder ganze Sätze abgelegt werden können. Über eine Speicheradresse kann der Arduino dann darauf zugreifen.

Die Variable kann, wie es der Name schon vermuten lässt, während des Programmablaufs unterschiedliche (variable) Werte annehmen.

Das Gegenteil einer Variablen, und auch hier ist der Name Programm, ist die Konstante.
Eine Konstante ist aber bei genauer Betrachtung nichts anders als eine Variable die durch den Zusatz const als unveränderlicher (konstanter) Wert definiert wird.

Welche Variablennamen dürfen vergeben werden?

Bei der Verwendung von Variablen gibt es einige Dinge, die beachtet werden müssen:

  1. Variablennamen dürfen keine Namen tragen, die genauso lauten wie Anweisungen.
    Beispiel: Serial = 13
  2. Variablennamen dürfen mńicht mit einer Zahl beginnen.
    Beispiel: 1Zahl = 17;
  3. Variablennamen dürfen Unterstriche _ enthalten
    Beispiel: _x = 112; x_1 =112; variable_1 = 112;
  4. Andere Sonderzeichen sind nicht erlaubt: Beispiel: variable~1 = 112;

Arduino Konstanten

Die Arduino-Programmiersprache verfügt über vordefinierte Konstanten. Sie dienen in erster Linie dazu den Code übersichtlicher zu gestalten und dem Programmierer die Arbeit zu erleichtern.

1. Boolesche Konstanten

Boolesche Konstanten werden in Abfragen, Schleifen oder zur Wertzuweisung bei Variablen des Datenyps boolean verwendet. Dieser Datentyp kann nur zwei Werte annehmen entweder Wahr oder Falsch. In der Arduino Programmiersprache heißen sie entsprechend:

Erwähnt werden sollte an dieser Stelle, das Sie auch anstatt der vordefinierten Variablen true und false auch Ganzzahlen verwenden könnten.

Hinweis


Warum false 0 ist, aber true nicht unbedingt 1

In der Booleschen Algebra ist jeder Wert der ungleich 0 ist, true. Also wäre ein Wert von -1 oder 225 auch true.
Allein der Wert 0 entspricht false.

Code Beispiel zu true und false

Code-Beispiel

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int x = 5, y = 3;
int led = 13; // Pin-Nr. zum Anschluss der LED
 
void setup(){
  pinMode(led, OUTPUT); // definiere Pin-Nr. 7 als Ausgang (OUTPUT)
 }
 
void loop(){
  if (x > y == true){ // Wenn x < y wahr ist
    digitalWrite(led, HIGH); // dann schalte die LED ein
  } else {
    digitalWrite(led, LOW); // ...sonst schalte den LED aus
  }
}

2. Pegelkonstanten für Ein- und Ausgänge

Die Pins des Arduinos können je nach Funktion zum Schalten von Ausgängen oder zum Erfassen von Signalzuständen verwendet werden. Ein digitaler Ausgang kann zum Beispiel ein- oder ausgeschaltet sein.
Bei einem geschalteten Ausgang spricht man von einem High-Pegel. Dieser entspricht einer Spannung von bestenfalls 5V. Zum Setzen eines digitalen Ausgangs bedient man sich der
digitalWrite()-Funktion. Das Gegenstück dazu ist der Low-Pegel, der im Idealfall bei etwa 0 Volt liegt. Sollte ein Pin als Eingang definiert sein, dann kann der Pegel mit digitalRead() für den entsprechenden Pin ausgelesen werden. Die Spannung am Eingang beträgt wieder im besten Fall ca. 5V und bei LOW-Pegel etwa 0V.

Code Beispiel zu digitalRead() und digitalwrite() mit HIGH und LOW

Code-Beispiel

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int taster = 7; // Pin-Nr. zum Anschluss des Tasters
int motor = 8; // Pin-Nr. zum Anschluss des Motors
 
void setup(){
  pinMode(taster, INPUT); // definiere Pin-Nr. 7 als Eingang (INPUT)
  pinMode(motor, OUTPUT); // definiere Pin-Nr. 8 als Ausgang (OUTPUT)
}
 
void loop(){
  if (digitalRead(taster) == HIGH){ // Wenn Taster gedrückt wird
    digitalWrite(motor, HIGH); // dann schalte Motor ein
  } else {
    digitalWrite(motor, LOW); // ...sonst schalte den Motor aus
  }
}

Tabelle Logikpegel

Spannungsbereich Logikpegel
0 – 1,5V LOW-Pegel
1,5 – 3,0V undefinierter Pegel (Rauschen)
3,0 – 5,0V High-Pegel

3. pinMode()-Konstanten

Wie bereits erwähnt können Pins des Arduino sowohl als Ein- als auch Ausgang fungieren. Dazu steht uns die pinMode()-Funktion zur Verfügung. Sie benötigt zwei Parameter.
Der erste legt den Pin fest und besteht aus einer Zahl. Als zweiten Parameter kann eine der beiden Arduino-Konstanten verwendet werden, um anzugeben, ob es sich um einen Eingang oder Ausgang handelt-
Sie lauten:

Code Beispiel pinmode()

Code-Beispiel

1
2
pinMode(7, OUTPUT); // definiert Pin 7 als Ausgang
pinMode(8, INPUT); //defieniert Pin 8 als Eingang

Der erste Variablentyp – Integer

In der Arduino-Programmiersprache gibt es unterschiedliche Typen von Variablen. Zum Beispiel den Typ Integer, mit dem ganzzahlige Werte verarbeitet werden können. Um Schreibarbeit zu sparen, wurde zur Programmierung die Kurzform int gewählt.

Deklaration von Variablen

Wenn wir mit Variablen arbeiten wollen, müssen wir sie dem Arduino Uno erst bekannt machen, damit er weiß wieviel Speicher er zum Ablegen des Variableninhalts bereitstellen muss.
Dieser Vorgang wird Deklaration genannt.
Zur Deklaration einer Variablen benötigst du zwei Informationen:

Beispiel:

Du willst eine Variable, die ganze Zahlen aufnehmen und den Namen variablenname erhalten soll deklarieren.
Der Befehl dazu lautet: Arduino Variablen Deklaration

Mehrfachzuweisungen

Außerdem ist es möglich mehrere Variablen des gleichen Datentyps auf einmal zu deklarieren: Arduino Variablen Mehrfachdeklaration

Variablen initialisieren

Variablen kann bereits im Moment in dem sie deklariert werden ein Wert zugewiesen werden. Soll der Variable schon jetzt ein Wert zugewiesen werden, benötigt der Arduino eine weitere Information:
Dazu wird an den Befehl die Zuweisung des Wertes angefügt: Arduino Variablen Initialisierung

Datentypen – weitere Variablen

In der Programmiersprache von Arduino gibt es verschiedenen Arten von Variablen. Sie werden als Datentypen bezeichnet.
Den Typ Integer kennst du bereits. Der Abbildung kannst du entnehmen, welche Datentypen noch existieren um den Arduino zu programmieren.

Abbildung: Datentypen der Arduino Programmiersprache

Datentypen Arduino

Beschreibung:

Die zweiten Spalte beinhaltet die 3 Kategorien, die den Datentypen übergeordnet sind: Wahrheitswert, Zeichen und Zahlen.

  • Wahrheitswert – ein Wahrheitswert kennt nur zwei Zustände: Wahr oder Falsch.
  • Zeichen – verarbeitet nur alphanumerische Zeichen (Bsp.: a oder !)
  • Zahl – neben den ganzen Zahlen (Bsp.: 245) kann der Arduino auch Fließkommazahlen verarbeiten ( Bsp.: 3.1415).

In der letzten Spalte befinden sich die Datentypen, die mit der Arduino-Programmiersprache verarbeitet werden können.

Tabelle Datentypen

Datenyp Wertebereich Speicherbelegung
boolean TRUE oder FAlSE 1Byte
char Alphanumerische Zeichen 1 Byte
byte 0 bis 255 1 Byte
int -32768 bis 32767 2 Byte
long -2.147.483.648 bis 2.147.483.647 4 Byte
float -3.4028235E+38 bis 3.4028235E+38
einfache Genauigkeit
4 Byte
double Zahlenbereich + /- 10 E308
doppelte Genauigkeit
8 Byte

Beispiele zum Deklarieren der Datentypen des Arduinos

Bei der Deklaration, der neu hinzugekommenen Datentypen gilt das Gleiche wie für den Typ Integer.

Beispiele zum Inialtisieren der Datentypen des Arduinos

Variablen – Arrays

Ein Array ist eine Liste mit mehreren Elementen des gleichen Datentyps. Jedes Element der Liste kannst du über die Angabe der Position innerhalb auslesen oder ihm einen Wert zuweisen.