» » X1 – 03.0 Funktionen

X1 – 03.0 Funktionen

eingetragen in: X1 | 0

 

Funktionen

Funktionen in der Programmierung sind ein wenig wie in Mathe in der Schule. Auf der einen Seite steht eine einfache Variable wie „x“, auf der anderen eine lange kompliziere Formel. Doch beide bedeuten das gleiche und können jeweils mit einander vertauscht werden. Das werden wir für unseren Roboter verwenden, da wir so jede weitere Lektion in eine Funktion schreiben können um sie später durch einen einfach Befehl verwenden zu können.
void setup() und void loop() sind beispielsweise auch Funktionen.

Viceo-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);
}

 

 

 

//Erstellt eine Funktion Namens laufVor

void laufVor(){ 
  ...
}

 

 

 

 
 
 

Step 1

Wir beginnen 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. Für jetzt müssen wir wissen das eine Funktion eine Liste von aufgaben ist die auf Abfrage ausgeführt wird.

 

 

 

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

 

 

 

 
 
 

Step 2

Jetzt kopieren wir den Code, der in void loop() stand, von der letzten Lektion „X1 - 2.2 Der erste Schritt“ in die geschweiften Klammern der Funktion.
Bis jetzt haben wir die Servos immer im void setup() aktiviert (attach). Wir können die Servos aber auch erst dann aktivieren wenn wir sie brauchen. Was uns Strom spart und eine Fehlerquelle löst. Servos Verbrauchen viel Strom und Stören manchmal die anderen Sensoren an Bord von X1.

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

 

 

 

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

 

 

 

 
 
 

Step 3

Nach der Benutzung müssen wir 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ügen wir wieder ein kurzes delay ein.

 

 

 

void loop() {
  laufVor();
}

 

 

 

 
 
 

Step 4

Jetzt wo wir die Schrittbewegung in die Funktion geschrieben haben, können wir den Befehl im void loop() verwenden. Hier steht jetzt nur noch eine Zeile, was die Übersicht extrem vereinfacht. Außerdem haben wir den großen Vorteil dass wir über das kleine minus vor void laufVor() die Funktion minimieren können. So haben wir am Ende eine Liste von selbst geschrieben Befehlen unter unserem void loop(). Ein anderer Nebeneffekt ist das andere unseren Code so besser verstehen können. Es lohnt sich eigentlich immer Code So verständlich wie möglich zu schreiben.

 

Fazit

Obwohl wir Faktisch mehr Codezeilen in diesem Programm haben als in dem Programm der letzten Lektion, scheint es als wären es viel weniger. Das fällt extrem auf wenn wir mehr und mehr Funktionen hinzufügen. Wir werden ab jetzt in nahezu jeder Lektion eine neue Funktion schreiben. So können wir eine einzelne Funktion schnell im void loop() testen oder diese verwenden um unser fertiges Programm zu schreiben.
 
 
 

Bitte hinterlasse eine Antwort