Der zweite Sketch – void loop()

In dieser Lektion erfährst du was sich hinter der loop()-Funktion verbirgt.
Die loop()-Funktion ist der Hauptbestandteil unseres Sketches. Alle Anweisungen, die sich zwischen der öffnenden und schließenden Klammer befinden werden der Reihe nach ausgeführt. Bei der letzten Anweisung angekommen (schließende Klammer), springt der Sketch zum Anfang der loop()-Funktion (öffnende Klammer) zurück.

void loop ()-Funktion Arduino
void loop ()-Funktion Arduino

Die Inhalt der Schleife wird also ständig wiederholt. So kann der Mikrocontroller sofort auf Änderungen von Schaltzuständen oder durch Sensoren erfasste Messwerte reagieren und nach deren Auswertung z.B. Motoren oder LEDs ein- oder ausschalten.

Die LED des Arduinos

Auf der Platine des Arduino Uno befindet sich zu eine LED, die zu Testzwecken verwendet werden kann. Im später folgenden Code-Beispiel soll genau diese LED blinken. Dazu müssen wir einige Vorbereitungen treffen. Wir beginnen damit den Pin (Kontakt) zu definieren, der später zum Schalten der LED verwendet werden soll. Dazu benötigt der Mikrocontroller zwei Informationen:
Welchen Pin soll er verwenden und welche Funktion soll diesem Pin zugewiesen werden? Fast alle Pins des Arduinos sind in ihrer Funktion in Grenzen frei wählbar. Sie können als Ein- oder Ausgang definiert werden.
Standardmäßig ist Pin 13 der auf Platine verbauten LED zugeordnet.

Die pinMode()-Anweisung

Es soll eine Spannung an diesem Pin ausgegeben werden, damit die LED leuchten kann. Dazu muss Pin 13 als Ausgang (engl. OUTPUT) definiert sein.
Beide Informationen werden dem Mikrocontroller mit der pinMode()-Funktion mitgeteilt:

Delay()

Damit die LED blinkt, muss sie für eine gewisse Zeit ein- und wieder ausgeschaltet werden. Dazu verwendet man die delay()-Funktion, die die Programmausführung für eine gewisse Zeit stoppt. Die Zeitangabe erfolgt in Millisekunden. 1000 Millisekunden sind eine Sekunde. Dieser Wert soll verwendet werden. Die Anweisung dazu sieht dann wie folgt aus:

Einen digitalen Ausgang mit digitalWrite() schalten

Eine einzige Anweisung fehlt damit der Sketch komplett ist. Der Mikrocontroller muss nun wissen, wann der Ausgang ein- oder ausgeschaltet werden soll. Das erreicht man mit digitalWrite().
Auch hier sind wieder zwei Informationen nötig:
Welcher Pin soll geschaltet werden? Für das verwendete Beispiel ist das Pin 13
Als zweite Information muss mitgegeben werden, ob der PIN ein- oder ausgeschaltet werden soll. Zum Einschalten kommen zwei Arduino Konstanten zum Einsatz: HIGH verwendest du zum ein- und LOW zum ausschalten. Soll Pin 13 eingeschaltet werden, sieht die vollständige Anweisung wie folgt aus:

Der zweite Arduino Sketch mit void loop()

Hier ist nun der vollständige Sktech:

Code-Beispiel

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void setup() {
  Serial.begin(9600);
  pinMode(13, OUTPUT);
}
 
void loop() {
// Alles was zwischen der öffnenden und schließende Klammer steht,
// durchläuft ständing diesen loop 
digitalWrite(13, HIGH);
Serial.println("LED eingeschaltet");
delay(1000);
digitalWrite(13, LOW);
Serial.println("LED eingeschaltet");
delay(1000);
}

Was passiert?

Zeile 1-5: Hier befindet der Abschnitt in dem die Anweisungen nur einmal abgearbeitet werden
Zeile 2: Mit Serial.begin(9600) stellen wir die Übertragungsgeschwindigkeit der seriellen Kommunikation des Mikrocontrollers aus 9600 Baud ein.
Zeile 3: Mit Serial.println() wird Pin 13 als Ausgang definiert.
Zeile 6: Hier beginnt die loop()-Funktion. Alle Anweisungen im Anweisungsblock werden ständig durchlaufen.
Zeile 9: Pin 13 wird eingeschaltet – die LED leuchtet.
Zeile 10: Als Statusmeldung wird LED eingeschaltet an den seriellen Monitor übermittelt.
Zeile 11: Das Programm wird eine Sekunde angehalten – Die LED bleibt solange eingeschaltet
Zeile 12: Pin 13 wird ausgeschaltet – die LED leuchtet nicht.
Zeile 13: Eine weitere Statusmeldung LED ausgeschaltet wird an den seriellen Monitor übermittelt.
Zeile 14: Das Programm wird für eine weitere Sekunde angehalten – die LED ist solange ausgeschaltet.
Zeile 15: Die schließende Klammer beendet den Anweisungsblock der loop()-Funktion und beginnt in Zeile 6 erneut mit der Abarbeitung der Anweisungen. Dies wiederholt sich fortwährend.

Ausgabe am seriellen Monitor

Serial Monitor Arduino piece #8
Serial Monitor Arduino piece #7
Serial Monitor Arduino piece #6
Serial Monitor Arduino piece #5
Serial Monitor Arduino piece #4
Serial Monitor Arduino piece #3
LED eingeschaltet
LED ausgeschaltet
LED eingeschaltet
LED ausgeschaltet
LED eingeschaltet
LED ausgeschaltet