» » X1 – 03.0 Funktionen

X1 – 03.0 Funktionen

eingetragen in: X1-lernkurs | 0

 

Funktionen

Funktionen in der Programmierung sind sehr nützlich, da sie es ermöglichen mehrere Befehle in einen einzigen zusammenzufassen. Wir können der Funktion einen Namen geben und sie mit Befehlen füllen, welche alle ausgeführt werden wenn wir die Funktion benutzen. Du könntest also theoretisch alle bisherigen Lektionen in eine Funktion schreiben um sie später durch einen einfachen Befehl ausführen lassen zu können. 

void setup() und void loop() sind beispielsweise auch Funktionen.

Video-Beispiel:

 

Code-Beispiel:

void laufVor(){ //Erstellt eine Funktion Namens laufVor
linkerServo.attach(servoLPin); //Wir können hier Servos Aktivieren
rechterServo.attach(servoRPin);
mittelServo.attach(servoMPin);
delay(10);

mittelServo.write(70);
linkerServo.write(25);
rechterServo.write(25);
delay(300);
mittelServo.write(50);
linkerServo.write(120);
rechterServo.write(120);
delay(300);

linkerServo.detach(); //Und Hier deaktivieren
rechterServo.detach();
mittelServo.detach();
delay(100);
}

 
 
 

Schritt 1

Wir benennen die Funktion void laufVor(). void steht hier für eine Funktion die keinen Wert zurück gibt, sondern nur einen Code ausführt. Eine Funktion kannst du dir also wie eine Liste von Aufgaben vorstellen, welche von oben nach unten abgearbeitet wird.

 

 

 

void laufVor(){ 

  ...
}

 

 

 

 
 
 

Schritt 2

Für Schritt 2 lohnt es sich den Code aus Lektion „X1 - 2.2 Der erste Schritt“ zu kopieren und in die geschweiften Klammern der erstellten Funktion einzufügen.
Bis jetzt haben wir die Servo immer im void setup() aktiviert (attach). Es hat allerdings einen großen Vorteil die Servo erst später im Code zu aktivieren. Tatsächlich ist es so, dass die Servo viel Strom verbrauchen und gelegentlich die anderen Sensoren am Bord des X1 stören. 

Ein kleines delay fügen wir wie gewohnt ein, damit der Arduino kurz Zeit bekommt, um die Servo wirklich vor der ersten Bewegung zu aktivieren.

 

 

 

mittelServo.write(70);
linkerServo.write(25);
rechterServo.write(25);
delay(300);
...

 

 

 

 
 
 

Schritt 3

Nach der Bewegung werden die Servo wieder deaktiviert. Hierfür wird der detach Befehl verwendet, welcher im Gegensatz zum attach Befehl, keinen Wert in den Klammern benötigt. Die Klammern bleiben leer, weil der Servo bereits einem Pin zugewiesen ist. 

 

 

 

void laufVor(){
  linkerServo.attach(servoLPin);
  rechterServo.attach(servoRPin);
  mittelServo.attach(servoMPin);
  delay(10);
  ...
  linkerServo.detach();
  rechterServo.detach();
  mittelServo.detach();
  delay(100);
}

 

 

 

 
 
 

Schritt 4

Jetzt wo wir die Laufbewegung in einer Funktion untergebracht haben, können wir den Befehl in einem void loop() verwenden. Unter dem void loop() steht jetzt nur noch eine Zeile. Wenn wir jetzt noch ein Minus vor void lauf vor setzen lässt sich die Funktion minimieren. Das ganze hat einen schönen Nebeneffekt und zwar haben wir eine Liste von selbst geschriebenen Befehlen unter void loop().

Diese Schreibweise sorgt für einen sehr übersichtlichen Code, der auch von anderen Personen sehr einfach nachvollzogen werden kann.

Es lohnt sich immer den Code so verständlich wie möglich zu schreiben. 

 

 

 

void loop() {
  laufVor();
}

 

 

 

 

Fazit

Obwohl dieses Programm mehr Codezeilen hat als das Programm der letzten Lektion ist es deutlich übersichtlicher. Du wirst ab jetzt in nahezu jeder Lektion eine Funktion schreiben. Dir wird vor allem dann auffallen, wie nützlich die hier gelernte Schreibweise ist um dein Programm übersichtlich zu gestalten. Du kannst damit einzelne Funktionen ohne großen Aufwand im void loop() testen, oder diese verwenden um ein fertiges Programm zu schreiben.

 
 
 

Bitte hinterlasse eine Antwort