Unterrichts- und Lernmaterial für Mikrocontroller
Unterrichts- und Lernmaterial fürMikrocontroller

1 - Funktionen und Navigation

Ein üblicher Weg, Roboter vorprogrammierte Manöver ausführen zu lassen, geht über Funktionen, um die wir uns hier kümmern wollen. Sie erfüllen bestimmte Aufgaben innerhalb eines Programms.

 

2 - Funktionsaufruf ohne Parameter

Im folgenden Diagramm wird der Ausschnitt eines Programms mit der Funktion Beispiel gezeigt. Sie befindet sich unterhalb der Methode loop. Die Funktion startet mit

  • void beispiel()
    

Die leeren Klammern deuten darauf hin, dass es keine Parameter gibt und void zeigt an, dass es keinen Rückgabewert der Funktion gibt. Zwischen den geschweiften Klammern { } befindet sich der Programmcode der Funktion.

Mit dem Funktionsaufruf beispiel() sucht das Programm nach beispiel(), führt den Programmcode aus, der dort zwischen den geschweiften Klammern steht und kehrt anschließend an die Stelle im Programm zurück, die dem Programmaufruf folgt.

3 - Funktionsaufruf mit Parameter

Funktionen können einen oder mehrere Parameter enthalten - es sind Daten, die an die Funktion beim Aufruf übergeben und von ihr benutzt werden. Im vorliegenden Beispiel ist der erste Funktionsaufruf vorwaerts(2000); der Zahlenwert wird an die Variable zeit der Funktion übergeben und initialisiert sie mit dem Wert 2000, sobald der Programmcode der Funktion abgearbeitet wird. Die Funktion delay(zeit) wird zu delay(2000).

Der zweite Funktionsaufruf vorwaerts(1000) initialisiert die Variable zeit vom Typ Integer mit dem Wert 1000 und arbeitet den Programmblock der Funktion ab. Delay(zeit) wird zu delay(1000).

4 - Fahrmanöver mit Funktionsaufrufen

Das folgende Programm zeigt, wie man die bisherigen Fahrmanöver VORWÄRTS, RÜCKWÄRTS, DREHEN NACH LINKS, DREHEN NACH RECHTS als Funktionen schreiben und aufrufen kann. Es ist sofort erkennbar, welche Vorteile dies mit sich bringt.

Aufgaben
  • Übertrage das Programm Fkt_alleBewegungen.ino in den Editor, speichere es ab und starte es anschließend.
  • Der Roboter sollte folgende Bewegungen ausführen: 2s vorwärts fahren, Drehung nach links mit anschließender Drehung nach rechts. 2s rückwärts fahren und wieder am Ausgangspunkt landen.

Das Programm Fkt_alleBewegungen.ino

Wenn beabsichtigt ist, dass der Roboter diese Bewegungen ständig wiederholen soll, dann müssen die vier Funktionsaufrufe vorwaerts, drehungLinks, drehungRechts und rueckwaerts in die Methode loop() verschoben werden. Die Funktion servosAbschalten ist dann zu löschen.

5 - Eine verbesserte Bewegungsfunktion

Das Programm Fkt_alleBewegungen.ino lässt sich verkürzen und kompakter gestalten. Im folgenden Programm Fkt_bewegung.ino nutzen wir dazu die Funktion bewegung, die drei Parameter enthält: vLinks, vRechts und msZeit.

  • void bewegung(int vLinks, int vRechts, int msZeit)
    

Die Bereichsvorgaben der einzusetzenden Werte für vLinks und vRechts sind leicht zu merken und mit Hilfe der Funktion bewegung muss man nicht mehr über die Drehbewegung der Räder im oder entgegen dem Uhrzeigersinn nachdenken. Es gelten für vLinks und vRechts:

  • positive Werte bewegen den Roboter vorwärts
    
  • negative Werte bewegen den Roboter rückwärts
    
  • volle Geschwindigkeit vorwärts bekommt den Wert 200
    
  • volle Geschwindigkeit rückwärts bekommt den Wert -200
    
  • 0 steht für Stopp
    
  • die lineare Geschwindigkeitssteuerung liegt im Bereich von -100 bis +100.
    

Die Bereichsvorgaben für msZeit sind:

  • positive Werte führen eine Bewegung für die Dauer der angegebenen Zeit aus
    
  • -1 stoppt eine Bewegung
    

Einige Beispiele zeigen, wie die Funktion bewegung aussieht, wenn sich der Roboter vorwärts, rückwärts, nach links bzw. rechts drehend bewegt und schließlich stoppt.

Funktionsaufruf Erläuterung

bewegung(200, 200, 2000);

vorwärts für 2 Sekunden, full-speed

bewegung(-200, 200, 600);

nach links drehend für 0,6 Sekunden

bewegung(200, -200, 600);

nach rechts drehend für 0,6 Sekunden

bewegung(-200, -200, 2000);

rückwärts für 2 Sekunden, full-speed

bewegung(0, 0, -1);

Servos abschalten
Aufgaben
  • Übertrage das Programm Fkt_bewegung.ino in den Editor, speichere es ab und starte es.
  • Überzeuge dich davon, dass alle Bewegungen, vorwärts, links drehend, rechts drehend, rückwärts und die Stoppsequenz ausgeführt werden.

In der Funktion bewegung steht eine 0 für Stopp, dieWerte zwischen -100 und +100 für den Steuerungsbereich der Geschwindigkeiten und 200 sowie -200 für full-speed.

Mit Hilfe dieser Funktion lassen sich Fahrmanöver sehr schnell und einfach umsetzen, indem man für jedes Rad entsprechende Parameter einsetzt.

 

Beispiel

Das rechte Rad soll mit voller Geschwindigkeit laufen, das linke Rad nur halb so schnell. Die Bewegung soll 3 Sekunden lang ausgeführt werden. Der entsprechende Funktionsaufruf sieht wie folgt aus:

  • bewegung(50, 100, 3000);
    

Ein zweites Beispiel. Das linke Rad steht still, während sich das rechte full-speed dreht und so den Roboter um das linke Rad drehen lässt.

  • bewegung(0, 200, 1200);
    

Kommentar schreiben

Kommentare

  • olaf (Sonntag, 10. Dezember 2017 08:35)

    wow...die mit Abstand beste Site, die ich bisher zu diesem Thema gesehen habe :-))
    Vielen Dank dafür. Hilft super beim Erklären!!

  • David Eisenblätter (Sonntag, 11. Februar 2018 13:38)

    Sehr schön erklärt, und zufällig heute, wo ich nochmal nach einer detailierten Gedankenstütze diesbezüglich gesucht habe!

    Vielen vielen Dank!

    David.

Bitte geben Sie den Code ein
* Pflichtfelder
Druckversion Druckversion | Sitemap
© Reinhard Rahner - Gettorf