Lass die LED deines Arduinos blinken

Header Arduino programmieren
Lektion
Downloads

Zeit für dein erstes Programm! Auf deinem Arduino UNO befinden sich mehrere kleine LEDs – eine hiervon wirst du nun immer wieder an- und ausschalten bzw. blinken lassen.

Simulation: Tinkercad

Öffne zunächst die Arduino IDE und erstelle einen leeren Sketch. Wähle hierfür im Menü Datei den Punkt Neu. Nun siehst du die beiden leeren Funktionen void setup() und void loop().

Die Setup-Funktion

Zunächst widmen wir uns der Setup-Funktion. Trage hier zwischen die beiden geschweiften Klammern { } folgende Zeile Code ein:

pinMode(LED_BUILTIN, OUTPUT);

Die Setup-Funktion sieht dann so aus:

void setup() {
  // put your setup code here, to run once:
  pinMode(LED_BUILTIN, OUTPUT);
}

Schauen wir uns diese Zeile genauer an. Zunächst gibt es hier eine weitere Funktion: pinMode(). Auch sie führt eine ganz bestimmte Aktion aus – sie legt für einen bestimmten Pin deines Arduinos eine Richtung bzw. ihren Modus fest: Entweder ein Signal senden (OUTPUT) oder ein Signal empfangen (INPUT).

Im Gegensatz zur Setup- und Loop-Funktion “erwartet” diese Funktion jedoch etwas zwischen den runden Klammern ( ), nämlich sogenannte Parameter.

Der erste dieser Parameter bestimmt den Pin, dessen Richtung festgelegt werden soll. In unserem Fall ist das kein Analog- oder Digital-Pin an den Seiten des Arduinos, sondern die interne Led. Diese wird im Sketch mit LED_BUILTIN bezeichnet.

Der zweite Parameter bestimmt dann die Richtung – entweder OUTPUT oder INPUT. Wenn du eine LED steuern möchtest, muss der Arduino ihr entsprechende Signale senden. Vom Arduino aus gesehen ist das also ein OUTPUT. Wenn jedoch zum Beispiel ein Sensor Messdaten an den Arduino sendet, ist das wiederum ein eintreffendes Signal – also ein INPUT.

Hinweis: Achte darauf, dass du jede Zeile, die nicht mit einer öffnenden oder schließenden Klammer endet mit einem Semikolon ; abschließt. Ansonsten kann dein Sketch nicht hochgeladen werden. Von dieser Regel gibt es Ausnahmen, die jedoch jetzt noch nicht wichtig sind.

Die Richtung des Pins musst du nur einmal zu Beginn deines Programms festlegen. Deshalb befindet sich die Funtion pinMode() in der Setup-Funktion.

Die Loop-Funktion

Kommen wir zum Loop. In der vorangegangen Lektion hast du gelernt, dass der Code innerhalb des Loops sich ständig wiederholt. Das können wir uns für das Blinken der LED zunutze machen.

Eigentlich ist Blinken nichts anderes als 1) das Licht anschalten und 2) das Licht ausschalten – und wieder von vorne:

Blinkendes Licht

Die LED anschalten

Trage zunächst in deiner Loop-Funktion zwischen den geschweiften Klammern { } folgende Zeile ein:

digitalWrite(LED_BUILTIN, HIGH);

Hierbei handelt es sich wieder um eine Funktion, diesmal also digitalWrite(). Diese Funktion kann über einen Digital-Pin entweder das Signal HIGH oder LOW senden. HIGH bedeutet soviel wie “an” bzw. 1 – LOW hingegen steht für “aus” bzw. 0.

Am Beispiel einer LED ist das recht leicht zu verstehen: HIGH schaltet die LED ein, LOW schaltet sie aus.

Auch die Funktion digitalWrite() erwartet zwei Parameter: Den Pin, den sie ansteuern soll und das Signal. In unserem Fall ist das also der Pin LED_BUILTIN und zunächst das Signal “Anschalten” – also HIGH.

Du hast nun also eine Zeile, um die LED anzuschalten. Aber das ist natürlich noch kein ordentliches Blinken.

Warte kurz

So ein Arduino ist erstaunlich schnell. Würdest du die LED anschalten und sie sofort danach wieder ausschalten, würdest du vom Blinken nichts mitbekommen. Der Wechsel von An und Aus wäre so schnell, dass es so aussähe, als würde die LED durchgängig leuchten.

Wir müssen also kurz warten.

Im Sketch funktioniert das mit der – ja, richtig – Funktion delay(). Diese Funktion verzögert sozusagen den weiteren Ablauf deines Programms. Hierfür erwartet sie einen einzigen Parameter, nämlich die Dauer der Verzögerung – in Millisekunden.

Trage als nächstes folgende Zeile in der Loop-Funktion ein:

delay(1000);

Damit verzögerst du die weitere Ausführung um 1.000 Millisekunden, was genau einer Sekunde entspricht. Die Verzögerung sorgt dafür, dass die LED, die du in der Zeile davor angeschaltet hast, eine Sekunde lang brennt. Erst dann wird die nächste Zeile ausgeführt.

Die LED ausschalten und wieder warten

In den nächsten zwei Zeilen Code drehst du den Spieß um – zunächst schaltest du die LED aus und sorgst dafür, dass das für eine Sekunde so bleibt:

digitalWrite(LED_BUILTIN, LOW);
delay(1000);

Die Funktion digitalWrite() kennst du ja bereits. Diesmal sendet sie an die interne LED (LED_BUILTIN) jedoch das Signal LOW. Sie schaltet sie also aus – und zwar ebenfalls für eine Sekunde.

Die vollständige Loop-Funktion sieht dann folgendermaßen aus:

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(LED_BUILTIN, HIGH);
  delay(1000);                      
  digitalWrite(LED_BUILTIN, LOW);
  delay(1000);
}

Alles wieder von vorne

Jetzt hast du alles, was du für deine blinkende LED brauchst: Du schaltest das Licht kurz ein und schaltest es wieder kurz aus. Den Rest, nämlich die Wiederholung, erledigt die Loop-Funktion von ganz alleine.

Sobald dein Programm das zweite Mal delay(1000); abgearbeitet hat, ist es am Ende des Loops angekommen und springt wieder zu dessen Anfang – also in die Zeile digitalWrite(LED_BUILTIN, HIGH);

Hast du den Sketch aus den Downloads dieser Lektion schon auf deinen Arduino geladen? Wenn nicht, probiere es gleich aus! Spiele anschließend etwas mit den Parametern in der Delay-Funktion herum und verändere sie. Vielleicht kannst du zur Übung ja sogar etwas morsen, indem du die LED unterschiedlich lang aufleuchten lässt.