Funciones-que-funcionan

In dieser Lektion sehen wir uns die Verwendung der Funktionen an. Sobald wir gelernt haben, Funktionen zu programmieren und verstanden haben, wie die Kommunikation über die serielle Schnittstelle  erfolgt und wie Variablen verwendet werden, sind wir bereit, wirkliche Programme zu erstellen, die mit Peripheriegeräten und anderen Geräten interagieren.

Wozu Funktionen?

Funktionen sind nichts anderes als Einheiten von Codezeilen, die eine bestimmte Aufgabe durchführen, die wir mit Namen versehen. Sie sind nicht zwingend notwendig, da der Code an beliebigen Stellen des Programms eingesetzt werden kann, aber sie erlauben eine sauberere und geordnetere Entwicklung des Codes.

Die Funktionen dienen primär drei Zwecken:

  • Das Erstellen eines geordneten, sauberen und besser zu pflegenden Codes
  • Die Unterstützung der Wiederverwendung des Codes über Funktionsbibliotheken
  • Die Unterstützung der Verbesserung und des Wachstums des Codes

Tatsächlich vereinfachen die Funktionen die Arbeit des Entwicklers beträchtlich. Dies gilt nicht nur dann, wenn er seinen eigenen Code erstellt, sondern vor allem auch, wenn er Code verwendet, der von anderen entwickelt wurde.

Die Funktion “Hallo Welt (Hola Mundo)”

Wie würde die einfachste Funktion aussehen, die sich darauf beschränkt, über die serielle Schnittstelle “Hallo Welt” zu schreiben?

Analysieren wir sie:

  • void -Dieses Wort wird verwendet, da die Funktion nichts ausgibt, das heißt, kein Ergebnis erstellt.  Das wirst du später besser verstehen, wenn wir die Funktionen behandeln, die ein Ergebnis ausgeben.
  • holamundo – Dies ist der Name der Funktion, hier können wir jeden Beliebigen wählen.
  • ( ) – Zwischen die Klammern würden wir Parameter einsetzen, die in diesem Fall aber nicht vorliegen. Daher findet sich hier keine Eintragung. Auch das wirst du besser verstehen wenn wir eine Funktion erstellen, die Parameter verwendet.

Wie sähe ein Programm aus, das die Funktion holamundo (Hallo Welt) verwendet?

Was tut dieses Programm? Überprüfe es einmal alleine. Wir verraten dir nur, dass dieses Programm mit dem Folgenden identisch ist:

Parameter verwenden

Stellen wir uns jetzt eine Funktion vor, die uns über die serielle Schnittstelle die Summe von zwei Zahlen a und b ausgibt.  Da wir beim Programmieren nicht wissen, welchen Wert a und b besitzen, verwenden wir Parameter (das Auslesen eines Sensors zum Beispiel).

Dann wollen wir uns dies mal ansehen:

  • void – erneut gibt diese Funktion nichts aus
  • sumar – (addieren) ist der Name der Funktion
  • (int a, int b) – dies sind die zwei Parameter, die diese Funktion annehmen kann, mit denen das Addieren durchgeführt wird; a y b sind lokale Variablen der Funktion und können daher nicht außerhalb von ihr verwendet werden.

Wie würde ein vollständiges Programm aussehen?

Diese Funktion sendet über die serielle Schnittstelle die Kette 9.

Eine INKORREKTE Verwendung der Variablen in Funktionen

Im Folgenden zeigen wir einen Code der kompiliert und funktioniert, den du aber nie verwenden solltest.

Dieses Programm kompiliert und funktioniert und dennoch handelt es sich um schlechten Code. Woran liegt das? Wir bestimmen die globalen Variablen a und b. Da sie global sind können sie an jeder beliebigen Stelle unseres Programms verwendet werden.  Anschließend bestimmen wir die Funktion sumar (addieren), ohne jeglichen Parameter, um a und b zu addieren. Da sie global sind werden die Werte von a und b jedes Mal eingesetzt. Am Ende geben wir a und b einen Wert und erstellen die Summe. Soweit alles in Ordnung. Dennoch ist es so, dass wir globale Variablen nicht in den Funktionen verwenden sollten, sondern diesen die benötigten Werte über die Parameter zuweisen (wie wir dies zuvor auch getan haben).  Auch wenn es so funktioniert, ist es nicht richtig, da es nicht unseren zuvor genannten Zielen der Ordnung, Wiederverwendung, Entwicklung und Pflege des Codes entspricht.

Jetzt aber, wir geben einen Wert aus

Abschließend erstellen wir die Funktion, die nicht nur Aktionen ausführt, sondern auch einen Wert ausgibt, wie zum Beispiel die Summe von zwei Zahlen. Wie ihr euch wahrscheinlich vorstellen könnt, könnten die Funktion und das Programm folgendermaßen aussehen:

Überprüfe es und du wirst sehen, wie es funktioniert.

Eine Übung

Erstelle nun eine Funktion, die die Ausführung des Programms anhält, bis sie etwas über die serielle Schnittstelle erhält. Wir werden diese Funktion später verwenden. Im Grunde müsste die Funktion loop so lange angehalten werden, bis etwas über die serielle Schnittstelle ankommt. In diesem Moment liest sie das Kommando aus (auch wenn sie nicht antwortet) und das Programm wird wieder normal ausgeführt. Das ist praktisch, wenn unser Programm darauf wartet, dass Kommandos über Bluetooth eintreffen, um zu wissen, was es tun soll. Solange nichts ankommt, wartet es und sobald etwas ankommt, handelt es entsprechend.

Im folgenden Video zeige ich dir eine mögliche Lösung:

In der nächsten Lektion beginnen wir mit dem Einschalten einer LED und erstellen lustige Dinge mit ihr.