» » X1 – 03.0 Funktionen

X1 – 03.0 Funktionen

eingetragen in: X1 | 0

 

Funktionen

Funktionen in der Programmierung sind ein wenig wie in der Schule Mathe. Auf der einen Seite steht eine einfache Variable wie „x“, auf der anderen eine lange Formel. Doch beide bedeuten das gleiche und können jeweils mit einander vertauscht werden. Das wirst du für deinen Roboter verwenden, da du so jede weitere Lektion in eine Funktion schreiben kannst um sie später durch einen einfachen Befehl verwenden 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);
}

 
 
 

Step 1

Du beginnst mit der Funktion void laufVor(). void steht hier für eine Funktion die keinen Wert zurück gibt, die also nur einen Code ausführt. Wir werden später noch genauer auf andere Funktionen eingehen. Zu diesem Zeitpunkt musst du wissen das eine Funktion eine Liste von Aufgaben ist die auf Abfrage ausgeführt wird.

 

 

 

void laufVor(){ 

  ...
}

 

 

 

 
 
 

Step 2

Jetzt kopierst du den Code, der in void loop() stand, aus der Lektion „X1 - 2.2 Der erste Schritt“, in die geschweiften Klammern der Funktion.
Bis jetzt hast du die Servos immer im void setup() aktiviert (attach). Du kannst die Servos aber auch erst dann aktivieren wenn du sie brauchst, was dir Strom spart und eine Fehlerquelle löst. Servos Verbrauchen viel Strom und stören manchmal die anderen Sensoren am Bord von X1.

Ein kleines delay fehlt noch, damit der Arduino kurz Zeit bekommt um die Servos wirklich vor der ersten Bewegung zu aktivieren.

 

 

 

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

 

 

 

 
 
 

Step 3

Nach der Benutzung musst du die Servos wieder deaktivieren. Dies funktioniert mit dem detach Befehl. Er ähnelt dem attach Befehl, jedoch bleiben die Klammern jetzt leer da der Servo bereits einem Pin zugewiesen ist. Auch hier fügst du wieder ein kurzes delay ein.

 

 

 

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

 

 

 

 
 
 

Step 4

Jetzt wo du die Schrittbewegung in die Funktion geschrieben hast, kannst du den Befehl im void loop() verwenden. Hier steht jetzt nur noch eine Zeile, was alles übersichtlicher macht. Außerdem hast du den großen Vorteil, dass du über das Minus vor void laufVor() die Funktion minimieren kannst. So hast du am Ende eine Liste von selbst geschriebenen Befehlen unter deinem void loop(). Ein Nebeneffekt ist, dass andere deinen Code so besser verstehen können, daher lohnt es sich eigentlich immer einen Code so verständlich wie möglich zu schreiben.

 

 

 

void loop() {
  laufVor();
}

 

 

 

 

Fazit

Obwohl du mehr Codezeilen in diesem Programm hast als in dem Programm der letzten Lektion, ist es übersichtlicher. Das fällt vor allem auf wenn du mehr Funktionen hinzufügst. Du wirst ab jetzt in nahezu jeder Lektion eine neue Funktion schreiben. So kannst du eine einzelne Funktion schnell im void loop() testen oder diese verwenden um dein fertiges Programm zu schreiben.
 
 
 

Bitte hinterlasse eine Antwort