Funktionen

Bisher haben wir uns mit sehr einfachen Aufgaben beschäftigt. Eine Aufteilung unseres Sketch in verschiedene Funktionen war demnach nicht erforderlich. Doch wenn ein Sketch umfangreicher wird, ist es sehr zu empfehlen einzelne Abläufe in  Funktionen zusammen zu fassen. Einerseits wird so der Code leichter lesbar. Anderseits können solche Funktionen mehrfach im Sketch aufgerufen werden, sowie auch auch in anderen Sketches Verwendung finden.


Funktionen deklarieren
Wir haben bisher mit den beiden Standardfunktionen setup() und loop() gearbeitet. „Arduino IDE“ ruft diese selbstständig auf und wir mussten uns nicht weiter darum kümmern. Wir können jedoch auch selbst Funktionen erstellen und diese in unserem Sketch aufrufen.

Syntax

  • Die Deklaration einer Funktion wird mit der Deklaration des Datentyps zur Rückgabe eingeleitet.
    Da für die Funktionen „setup“ und „loop“ kein Rückgabewert vorgesehen ist, wird die Deklaration „void“ (nicht definiert) verwendet.
  • Danach vergeben wir einen eindeutigen Funktionsnamen, der den selben Regeln wie ein Variablennamen unterliegt.
  • In runden Klammern können wir dann, keine, eine oder mehrere Variablen (getrennt durch ein Komma „,“) für die Übergabe deklarieren.
  • In geschwungenen Klammern wird der auszuführende Code gesetzt.
  • mit return weisen wir der Funktion an, einen Wert entsprechend der in der Deklaration festgelegten Datentyp zurück zu geben.

Aufruf einer Funktion mit Rückgabewert

  • Der Aufruf einer Funktion mit einem Rückgabewert erfolgt als Zuweisung.
  • die Zuweisung wird mit dem Funktionsnamen eingeleitet.
  • in den runden Klammern werden gegebenenfalls die Parameter in der vorgesehenen Reihenfolge übergeben.

Die Deklarationen der Variablen einer Funktion sind lokal und demnach nur innerhalb der Funktion gültig. Es kann jedoch jederzeit auch auf globale Variable zugegriffen werden. 

Aufruf einer Funktion ohne Rückgabewert

  • Der Aufruf einer Funktion ohne Rückgabewert erfolgt durch einen einfachen Aufruf des Funktionsnamen.
  • Übergabeparameter werden in der Reihenfolge der Deklaration in runden Klammern übergeben.
    Auch ohne Übergabeparameter müssen die runden Klammern geschrieben werden!


Eine leere Funktion erstellen

Grundsätzlich ist es Dir frei gestellt, wo Du eigene Funktionen in deinem Sketch deklarierst. Dennoch hat es sich eingebürgert, eigene Funktionen am Ende eines Sketch an zu fügen. Da jedoch der Compiler dein Sketch in Blöcken abarbeitet, kann es sein, das dieser die Funktion nicht vor dem ersten Aufruf erkennt.
Der Compiler würde in diesem Fall abbrechen und eine Fehlermeldung ausgeben.
Dieses Problem lässt sich sehr einfach lösen, wenn man eine leere Funktion am Anfang des Sketch anlegt.

Syntax
Dazu reicht es die Funktion als „void“ mit ihrem Namen und ohne Angabe von Übergabeparametern vor der „setup()“- Funktion (demnach global) zu definieren. Die geschwungenen Klammern werden dabei weg gelassen. Jedoch ist in diesem Fall die Anweisung mit einem Semikolon „;“ ab zu schließen.

Neben der nun zuverlässigeren Funktion des Compilers, verbessert diese Vorgangsweise auch die Lesbarkeit deines Codes für Co- Entwickler. Da dieser bereiz am Anfang deines Sketch darüber informiert wird, welche Funktionen im Code Verwendung finden.


Auslagern in weitere Dateien
Es besteht bei Arduino auch die Möglichkeit, Funktionen in weitere Dateien aus zu lagern. Bei großen Projekten erhöht dies die Auffindbarkeit von Code ungemein.
Der Compiler beginnt immer mit der Datei, die den Namen des Ordners trägt. In dieser sind also die globalen Variablen, leere Funktionen und eventuelle Anweisungen an den Precompiler unter zu bringen.

Anlegen einer weiteren „ino“- Datei

  • Klicke dazu auf das „Pfeil nach unten“- Symbol in der hellblauen Leiste!
  • Wähle „Neuer Tab“!
  • Unten kannst Du nun in der gelben Leiste einen neuen Dateinamen angeben.
    Bitte füge unbedingt die Endung „.ino“ dem Dateinamen an!
    Der Compiler weis sonst nicht, wie er mit der Datei verfahren soll, da es hier noch viele weitere Möglichkeiten gibt.

Nun öffnet sich in deinem „Adruino IDE“- Fenster ein neuer Tab. Du kannst ab sofort zwischen den einzelnen Tabs bequem wechseln und so komfortabler arbeiten.
Benutze bei den Dateinamen nach Möglichkeit Namen die auf die Funktionen innerhalb hinweisen, um dir später das auffinden der Codeteile zu erleichtern!


Fazit
Beim Coden sollten wir uns die Möglichkeit, Code in Funktionen zusammen zu fassen, immer vor Augen halten. So erleichtert es die Arbeit ungemein, Hardwarebaugruppen in Funktionen zusammen zu fassen, oder Codeblöcke in Funktionen auf zu teilen. Denken wir zum Beispiel an eine „NOT HALT“- Funktion,  einen Automatik-, oder einen Hand- Betrieb! Dieser Beitrag sprengt den sonst üblichen Umfang und es wird nicht jeder sofort alle Inhalte verstehen. Lege jetzt ganz bewusst eine Pause ein und diskutiere diesen Beitrag sowie dessen Konsequenzen auf das Coding in der Google Community.