4. Arduino-Projekt: Blinkschaltung (21/33)

Die Hardware

Die folgende Schaltung lässt eine Led auf dem Steckbrett blinken. Die Leuchtdiode hängt über einen Widerstand zwischen Pin 12 des Arduino und Masse (GND = Ground):

blink_schaltplan

So könnte der Steckbrettaufbau aussehen:

blink_steckbrett

Die Programmierung

Arduino-Programme - auch Sketche genannt - sind eigentlich in der Programmiersprache C++ geschrieben. Die Arduino-Programmierumgebung versteckt aber geschickt sehr viel von der Komplexität von C++ und lässt sich so "relativ leicht" nutzen.

Vorbereitung:

1. Arduino-Programmierumgebung (IDE = Integrated Developement Environment) downloaden: https://www.arduino.cc/en/Main/Software

2. Nach der Installation den Arduino UNO (oder eine Variante) per USB-Kabel mit dem PC verbinden und evtl. warten, bis die Treiberinstallation abgeschlossen ist.

3. Unter dem Menupunkt "Werkzeuge" das "Board" auswählen: in der Regel "Arduino/Genuino UNO" und den "Port", an dem der Arduino angezeigt wird. Ist kein Port mit "Arduino" gekennzeichnet, so die USB-Verbindung trennen und erneut versuchen.

Zur Sache:

So sieht das Blink-Programm zur Gänze aus:

//
// Blinkschaltung für Pin 12
//

// Pinnummer an variable led knüpfen

const byte led = 12;

// setup() wird zu Beginn genau einmal
// aufgerufen

void setup() {
  
  pinMode(led, OUTPUT);
  
}

// loop() ist die Programmschleife,
// alles, was darin steht, wird wiederholt
// aufgerufen

void loop() {

  digitalWrite(led,HIGH);

  delay(300);

  digitalWrite(led,LOW);

  delay(300);

}

Die Kommentare (mit // eingeleitet oder zwischen /* und */ geklammert) erläutern, was vor sich geht.

4. Nach der Eingabe des Programms, klicken Sie das Pfeilsymbol oben links in der Arduino-IDE an. Es passiert folgendes: Das Programm wird in eine für den Arduino lesbare Form übersetzt (kompiliert) und anschließend über das USB-Kabel zum Arduino übertragen. Sie sehen an der kleinen blinkenden Led auf dem Arduino, dass die Übertragung läuft. Die Arduino-IDE blendet im Fußbereich Status- und Fehlermeldungen des Übersetzungsprogramms (Compiler) und des Übertragungsprogramms ein.

5. Wenn alles klappt, sollte jetzt die Led auf dem Steckbrett blinken.

Hier noch einige Erklärungen zu den Bezeichnungen, es empfiehlt sich, die umfangreiche Arduino-Referenz zu Rate zu ziehen:

Der Ausdruck

const byte led = 12;

kann so gelesen werden:

const : gibt an, dass die folgende Variable nicht veränderbar (konstant) ist
byte: gibt die Art der Variable an, die Variable hat hier also die Länge von einem Byte (8 Bit = 2 hoch 8 = 256, es lassen sich also die Zahlen von 0 bis 255 mit einem char darstellen)
led
: der Name der Variable, der beliebig geändert werden kann (allerdings sind einige Namen reserviert für spezielle Zwecke, z. B. const und char)
= : das ist der Zuweisungsoperator und tut genau das, was man von ihm erwartet
12
: der Wert der Variable, in diesem Fall die Arduino-Pin-Nummer an der die Led hängt
; : markiert das Ende einer Anweisung in C++

Der Ausdruck definiert also eine unveränderliche (const) Variable mit dem maximal größten Wert 255 (byte) und dem Namen led und weist (=) ihr den Wert 12 zu.

Wichtig: alle Anweisungen außerhalb der beiden Funktionen setup() und loop() können nur entweder Definitionen von Variablen und Funktionen sein, ggf. mit Wertezuweisung wie im Beispiel. Es können hier keine Rechenoperationen oder Funktionsaufrufe stehen. Die hier definierten Werte stehen als sogenannte globale Variablen allen Funktionen zur Verfügung.

Es folgt die Definition der Setup()-Funktion:

// setup() wird zu Beginn genau einmal
// aufgerufen

void setup() {
  
  pinMode(led, OUTPUT);
  
}

Dies kann so gelesen werden:

Beim Einschalten des Arduino oder nach einem Reset, wie er nach dem Hochladen eines Sketches (Programms) automatisch ausgelöst wird, springt das Arduino-Programm in die Setup-Funktion und arbeitet die darin befindlichen Teile einmal ab.

Dabei bedeutet:

void : gibt an, dass die Funktion setup() keinen Rückgabewert hat
setup() : der Name der Funktion - hier von der Arduino-IDE fest vorgegeben und kann nicht geändert werden
{ ... } : alles zwischen diesen Klammern wird der Reihe nach abgearbeitet
pinMode(led,OUTPUT); : die Arduino-Funktion "pinMode(pin, mode)" legt fest, ob der angegebene pin als Ausgang (mode = OUTPUT), z. B. zur Ansteuerung einer Led wie hier, oder als Eingang (mode = INPUT), z. B. zum Einlesen eines Tasters verwendet wird. Hier wird als pin-Wert die Konstante "led" übergeben (zeigt auf den Wert 12) und als mode OUTPUT gewählt

Es folgt die loop()-Funktion:

// loop() ist die Programmschleife,
// alles, was darin steht, wird wiederholt
// aufgerufen

void loop() {

  digitalWrite(led,HIGH);

  delay(300);

  digitalWrite(led,LOW);

  delay(300);

}

Diese kann so gelesen werden:

Nachdem die setup()-Funktion abgearbeitet ist geht das Arduino-Programm in eine Dauerschleife in der rasch hintereinander die loop()-Funktion aufgerufen wird. Auch diesen Namen darf man nicht ändern.

Dabei bedeutet:

void : gibt an, dass die Funktion loop() keinen Rückgabewert hat
loop() : der Name der Funktion - hier von der Arduino-IDE fest vorgegeben und kann nicht geändert werden
{ ... } : alles zwischen diesen Klammern wird der Reihe nach in einer Dauerschleife abgearbeitet
digitalWrite(led,HIGH); : die digitalWrite(pin,value)-Funktion schaltet den angegebenen Pin (pin, hier der durch die Konstante "led" gewählte) entweder auf +5V (HIGH) oder 0V (LOW). Der Funktionsaufruf bewirkt aufgrund der gewählten Hardwareverdrahtung, dass die Led eingeschaltet wird
delay(300); : die delay(value)-Funktion bewirkt, dass das Programm die angegebene Anzahl von Millisekunden (ms) pausiert. Das ist deshalb notwendig, da sonst durch den schnellen loop()-Durchlauf kein Ein- und Ausschalten mit bloßem Auge bemerkt werden könnte, da es zu schnell geht
digitalWrite(led,LOW); : schaltet die Led wieder aus
delay(300); : belässt die led für die angegebene Anzhal von Millisekunden im Aus-Zustand

rtmp://fms.blikk.it/vod_forum:::mp4:neuemedien/fb/uploads/media/video_5de9f86853fa8.mp4:::./forums/neuemedien/fb/uploads/media/video_5de9f86853fa8.jpg
So sieht das Ergebnis aus.

Kniffliges:

1. Modifizieren Sie den Sketch so, dass die Blinkzeiten schneller oder kürzer werden.

2. Verwenden Sie anstelle der Zahl 300 ein Konstante, das erleichtert das Ändern des Wertes, da er nur mehr an einer Stelle geändert werden muss.

3. Probieren Sie einen anderen Arduino-Pin aus.

4. Modifizieren Sie die Schaltung und das Programm so, dass zwei Leds unabhängig voneinander blinken.

Screenshots wurden mit Fritzing erstellt, falls nicht anders angegeben (https://fritzing.org)

Angerer Harald - Donnerstag, 5. Dezember 2019 (Zuletzt geändert: Freitag, 6. Dezember 2019)

Kategorien: Arduino Tutorials

Kommentieren Sie diesen Beitrag

Ihr Kommentar

Captcha