Mittwoch, 24. Juni 2015

Eigene Funktion für den Arduino definieren

In diesem Artikel geht es darum, wie man eine eigene Funktion definiert und verwendet. Dadurch müsst ihr dann nicht immer den selben Code schreiben oder kopieren, was dass Programmieren schneller, und den Code übersichtlicher macht.


Beginnen wir mit einem einfachen Beispiel. Wir wollen das Blinken der Arduino LED an Pin 13 in eine Funktion packen. Dadurch müssen wir dann nur noch blinken() angeben.
Um eine Funktion im Setup oder Loop Teil zu verwenden muss man sie erst definieren. Das geschieht außerhalb dieser beiden Programmteile. Zunächst muss man festlegen, welchen Datentyp die Daten haben, die die Funktion zurück gibt. Da das Blinken keine Daten zurück gibt, muss man void angeben. Danach kommt der Name der Funktion. In den Klammern könnte man dann die Argumente angeben (dazu später mehr). Innerhalb der geschweiften Klammern wird dann der Code angegeben, der beim Aufruf der Funktion einmal ausgeführt werden soll. In meinem Fall die LED anmachen, kurz warten, wieder ausmachen und wieder kurz warten. Da diese Funktion dauernd im Loop Teil aufgerufen wird, blinkt die BoardLED konstant.

Nun wollen wir diese Funktion universell einsetzbar machen. Dazu wollen wir immer in den Klammern den Pin angeben, an dem die LED angeschlossen ist, die blinken soll. Das bedeutet die Funktion hat ein Argument. Argumente haben wie Variablen immer einen Datentyp. Der Pin wäre in unserem Fall eine Zahl, also int. Bei der Definition der Funktion wird nun in den normalen Klammern der Datentyp und der Name des Argument angegeben. Die Pinzahl, die dann beim Aufrufen der Funktion angegeben wird, ist dann in der Funktion in der Variable, mit dem Argumentnamen, gespeichert.
In meinem Fall heißt das Argument pin. Deshalb steht bei mir, bei digitalWrite(), an der Stelle wo der Pin angegeben werden sollte, pin. Wenn wir nun ein weiteres Argument wollen, beispielsweise die Geschwindigkeit des Blinkens, so werden die Argumente mit Kommas getrennt.
Nun müssen wir immer die Dauer des Blinkens angeben. Wäre es nicht praktisch, wenn man eine Standarddauer für das Blinken hat und deshalb die Dauer nur angeben muss, wenn man eine Andere haben will?
Das lässt sich auch ganz einfach lösen! Dazu definiert man einfach die gewünschte Funktion mehrmals. Einmal in der Kombination, wo man nur den Pin angibt, und einmal in der Kombination Pin und Dauer. Das sähe dann so aus:
Nun wollen wir noch, dass uns die Funktion einen Rückgabewert liefert. Beispielsweise die Geschwindigkeit des Blinken. Schnell, normal oder langsam. Dazu muss man das void vor dem Namen in den jeweiligen Datentyp umändern, in diesem Fall String, und in der Funktion, über return variable, eine Variable vom genannten Datentyp zurückgeben. Um die gefühlte Geschwindigkeit zurück zu geben, sähe der Sketch so aus:
In der seriellen Konsole wird dann laufend die "gefühlte Blinkgeschwindigkeit" ausgegeben.

Jetzt weißt du, wie man Funktionen definiert, Argumente verwendet, auch Optionale, und, wie eine Funktion etwas zurück geben kann.

Keine Kommentare:

Kommentar veröffentlichen