Funktionen
Oft kommt es vor, dass man auf unterschiedliche Eingaben mit der gleichen Ausgabe reagieren möchte. Im folgenden Beispiel reagieren wir sowohl auf die Erkennung eines Hindernisses durch den linken Hindernis-Sensor, als auch durch den rechten Hindernis-Sensor, mit sich wiederholendem, sekündlichen Ein- und Ausschalten der Scheinwerfer.
Dies kann jedoch sehr schnell unübersichtlich werden. Benötigen wir bestimmte Abläufe mehrfach, so können wir diese in sogenannte Funktionen auslagern.
Funktionen bestehen prinzipiell erst einmal aus zwei Teilen. Dem Funktionskopf und dem Funktionsrumpf. Im Kopf wird zunächst der Funktionsname definiert. Im Funktionsrumpf befinden sich dann alle Anweisungsblöcke, die mit dieser Funktion ausgeführt werden sollen.
Die Funktion kann dann im Hauptablauf des Programms aufgerufen werden. Bei jedem Aufruf werden alle Anweisungen ausgeführt, die wir zuvor dem Funktionsrumpf hinzugefügt haben.
Im folgenden Beispiel haben wir den Lichtwechsel in die Funktion "light_sequence" ausgelagert. So können wir den Ablauf sowohl bei einer Erkennung durch den linken Hindernis-Sensor, als auch durch den rechten Hindernis-Sensor, wiederverwenden. Dies garantiert nicht nur, dass in beiden Fällen auf jeden Fall die gleichen Blöcke ausgeführt werden, sondern macht unseren "dauerhaft"-Block auch noch viel übersichtlicher!
Optional können Funktionen auch sogenannte Rückgabewerte liefern. Hierbei sendet die Funktion, jedesmal wenn sie aufgerufen wird, eine Antwort zurück. Dieser Rückgabewert, also die Antwort, kann innerhalb der Funktion bestimmt werden. So können hier also beispielsweise Berechnungen durchgeführt werden und das Ergebnis zurück an die Hauptfunktion geliefert werden.
Im nächsten Beispiel erstellen wir die Funktion "sonar_sensor". Diese prüft, sobald diese aufgerufen wird, den Ultraschallsensor und liefert, abhängig vom Abstandswert, den der Sensor liefert, entweder eine 0, eine 1, oder eine 2 zurück an die Hauptfunktion. Abhängig von dem gelieferten Wert schalten wir die Scheinwerfer und den Warnblinker des Joy-Cars in unterschiedliche Zustände.
Ist die gemessene Distanz zum Hindernis 50 cm oder größer wird eine 0 zurückgegeben, also das Licht eingeschaltet und die Warnblinker ausgeschaltet. Ist die gemessene Distanz kleiner als 50 cm wird eine 1 zurückgeben, also werden die Warnblinker eingeschaltet und das Licht ausgeschaltet. Sollte ein Fehler auftreten und der Rückgabewert des Sensors nicht in den definierten Bereichen liegen, wird eine 2 zurückgegeben. In diesem Fall gehen sowohl Licht als auch die Warnblinker an.