In der zweiten Praktikumsaufgabe zu c4ev3 kümmern wir uns um die Ansteuerung der Motoren unseres Roboters. Das ist auch gleichzeitig der erste Test zur Ansteuerung von Aktoren über c4ev3. Wenn du bisher noch kein c4ev3-Projekt in Eclipse angelegt hast, hilft dir unsere erste Praktikumsaufgabe dabei.

Zweck

In praktisch allen Anwendungsfällen bewegen sich Roboter. Manchmal fahren und lenken sie, manchmal bewegen sich bestimmte Bauteile, zum Beispiel um etwas zu greifen. Dafür sind Motoren notwendig. Bevor wir also größere Projekte realisieren können, testen wir kurz die Motoren unseres Roboters und lernen gleichzeitig dabei, wie wir diese Motoren in c4ev3 ansteuern können.

Vorbereitung

Die Vorbereitungen für diese Aufgabe halten sich in Grenzen. Erstelle zunächst ein neues c4ev3-Projekt wie in der ersten Praktikumsaufgabe beschrieben. Wir starten wieder mit einem Hello World-Projekt, da uns Eclipse dadurch sehr viele Einstellungen abnimmt. Die C-Datei im Verzeichnis src, in der wir unseren Programmcode schreiben, können wir beliebig anpassen, um die gewünschte Aufgabe zu erfüllen. Wenn du die Programmierung direkt ausprobieren möchtest, brauchst du einen Roboter, der fahren kann. Wie er das macht ist praktisch egal. Der Roboter sollte aber zwei Motoren nutzen, einen für jede Seite.

Aufgabe

Programmiere den Roboter so, dass er 10 cm nach vorne fährt und dann für eine Sekunde stehen bleibt. Anschließend soll der Roboter dieselben 10 cm rückwärts fahren, um wieder zur Ausgangsstelle zurückzukehren. Die Befehle, die für dieses Praktikum notwendig sind, kannst du aus der EV3-API von c4ev3 heraussuchen, falls du sie nicht auswendig weißt. Wenn du gar nicht weiter kommst oder nicht weißt, wie du anfangen kannst, helfen dir folgende Tipps vielleicht weiter. Aber versuche es erst ohne Hilfe.

Brauchst du einen Tipp?

Die folgenden Tipps helfen dir, falls du nicht weißt, wie du anfangen sollst oder wenn du nicht weiter kommst.

  • Zerlege die Aufgabe in kleine Teile. Zuerst fahren und wenn das klappt warten. Anschließend noch mal fahren, nur in die entgegengesetzte Richtung.
  • Achte immer darauf, dass du das aktuelle Projekt im Projekt-Explorer von Eclipse ausgewält hast.
  • Speichere dein Programm oft (Strg + S). So gehen Änderungen nicht verloren und beim Übertragen auf den EV3 wird die aktuelle Version übermittelt.
  • Denke daran, dein Programm zu kompilieren (Strg + B), bevor du den Code auf den EV3 überträgst.
Für die Aufgabe sind API-Aufrufe von c4ev3 nötig. Sie regeln, welche Befehle an den EV3 weitergeleitet werden. Wir haben bereits das EV3-API etwas weiter oben verlinkt. Wenn du gar nicht weiterkommst, findest du unten eine Übersicht über die Befehle, die dir bei dieser Aufgabe helfen. Diese Hilfe bauen wir aber nur einmal ein. In zukünftigen Aufgaben lassen wir sie raus.
API-Befehle für diese Aufgabe
Allgemeinen Befehle.
Befehl Erklärung
#inlcude <ev3.h> Implementiert den EV3-Header.
InitEV3() Initialisiert alle EV3-Funktionen.
FreeEV3() Gibt alle EV3-Funktionen wieder frei.
Befehle für die Motoren (Aktoren).
Befehl Erklärung
OnFwdReg(<Output>, <Speed>) Motor vorwärts drehen.
OnRevReg(<Output>, <Speed>) Motor rückwärts drehen.
Off(<Output>) Motor stoppen.
Befehle zur Steuerung eines Programms.
Befehl Erklärung
Wait(<Zeit_ms>) Warten die angegebene Zeitspanne (in Millisekunden).
Bitte nutze die Hilfe zu den API-Befehlen nur, wenn du gar nicht weiterkommst, da dadurch die Lösung für diese Aufgabe fast schon vorgegeben wird.

Lösung

Das nachfolgende Listing zeigt das komplette Programm und damit auch eine mögliche vollständige Lösung. Wenn du gar nicht weißt, wie du die Aufgabe angehen sollst, kannst du dir hier die Lösung anschauen.

[et_pb_dmb_code_snippet title=“Listing 1: Das C-Programm für die zweite c4ev3-Praktikumsaufgabe.“ _builder_version=“3.0.78″]I2luY2x1ZGUgPGV2My5oPgoKaW50IG1haW4odm9pZCkKewogICAgSW5pdEVWMygpOwoKICAgIC8vIE1vdG9yIEIgdW5kIEMgbWl0IDI1JSBMZWlzdHVuZyBmw7xyIGVpbmUgU2VrdW5kZSB2b3J3w6RydHMgZHJlaGVuLgogICAgT25Gd2RSZWcoT1VUX0JDLCAyNSk7CiAgICBXYWl0KFNFQ18xKTsKCiAgICAvLyBNb3RvciBCIHVuZCBDIGbDvHIgZWluZSBTZWt1bmRlIHN0b3BwZW4uCiAgICBPZmYoT1VUX0JDKTsKICAgIFdhaXQoU0VDXzEpOwoKICAgIC8vIE1vdG9yIEIgdW5kIEMgbWl0IDI1JSBMZWlzdHVuZyBmw7xyIGVpbmUgU2VrdW5kZSByw7xja3fDpHJ0cyBkcmVoZW4uCiAgICBPblJldlJlZyhPVVRfQkMsIDI1KTsKICAgIFdhaXQoU0VDXzEpOwoKICAgIEZyZWVFVjMoKTsKICAgIHJldHVybiAwOwp9
[/et_pb_dmb_code_snippet]