Nach den „normalen“ Schleifen im letzten Praktikum, lernen wir in diesem Praktikum eine Sonderform der Schleife kennen, welche es so nur auf Mikrocontrollern gibt: die Endlosschleife. Endlosschleifen werden am häufigsten in eingebetteten Systemen eingesetzt und dort meist auf Mikrocontrollern, wie sie im EV3 verbaut sind.
Wenn du bisher noch kein c4ev3-Projekt in Eclipse angelegt hast, hilft dir unsere erste Praktikumsaufgabe dabei.

Zweck

Endlosschleifen sind ein wichtiger Bestandteil auf Mikrocontrollern, denn häufig ist gewünscht, dass ein Roboter nach dem Einschalten ununterbrochen seinem Programm nachgeht, bis er wieder ausgeschaltet wird.
Dadurch kommt es aber auch zu Schwierigkeiten in der Programmierung. Ihr müsst deshalb einen Ausweg bzw. einen Endpunkt für die Schleife finden. Dies nennt man Abbruchbedingung.

Vorbereitung

Zur Vorbereitung erstellt ihr wie im vorherigen Praktikum zunächst ein neues c4ev3-Projekt. Wir starten wir diesmal wieder mit einem „Empty Project“-Projekt, da wir die Befehle, welche Eclipse uns vorher abgenommen hat, nun selber vertiefen wollen.

Aufgabe

Programmiere den Roboter so, dass er das kleine Quadrat endlos fährt. Dazu soll der EV3 10 cm vorfahren und sich um 90° drehen. Dies soll er solange wiederholen, bis die Abbruchbedingung erfüllt ist. Du musst also eine geeignete Abbruchbedingung wählen. Solltest du Schwierigkeiten bei der Auswahl haben, findest du unsere Abbruchbedingung als Anregung in den Tipps.

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 die Tipps weiter unten vielleicht weiter. Aber versuche es erst ohne Hilfe.

Die Befehle für Schleifen in einer textuellen Programmiersprache sind abhängig von der gewählten Sprache. Generell haben wir aber ein kleines Tutorial zu Schleifen für euch erstellt.

 

Brauchst du einen Tipp?

Wenn eine Endlosschleife programmiert wird, hängt sich der EV3 auf. Darum ist es sinnvoll die Schleife mit einer externen Abbruchbedingung zu versehen. Als Abbruchbedingung könnte man zum Beispiel das Drücken einer der fünf EV3-Tasten wählen.
Ihr müsst hier allerdings etwas Rücksicht auf die Eigenarten der Sprache c4ev3 nehmen: Wenn z.B. das Drücken der Zurück-Taste als Abbruchbedingung definiert wird, will sich der EV3 nach zwei Durchgängen ausschalten.
Außerdem wird immer nur einmal in jedem Schleifendurchgang geprüft, ob die Abbruchbedingung erfüllt ist. Deshalb reicht es manchmal nicht, die Taste nur kurz zu drücken, sondern sie muss gedrückt gehalten werden, bis der Roboter das Signal registriert hat.

Sollte sich der EV3 aufhängen, kann man einen Reset durchführen, indem man die mittlere und die Zurück-Taste gleichzeitig für fünf Sekunden gedrückt hält und danach loslässt. Der EV3 führt dann einen Neustart aus.

Für die Aufgabe sind API-Aufrufe von c4ev3 nötig. Sie regeln, welche Befehle an den EV3 weitergeleitet werden. Wir haben das EV3-API etwas weiter oben im Text bereits verlinkt.

ZUR LÖSUNG WEITERSCROLLEN

Lösung

Das nachfolgende Listing zeigt das komplette Programm und damit auch eine mögliche Lösung.
Gerne könnt ihr eure Lösung mit dieser vergleichen. Wichtig ist aber, dass es hier nicht eine einzige richtige Lösung gibt. Teilt uns doch gerne mit, was ihr anders gemacht habt!

Wenn ihr gar nicht weiterkommt oder keine Ideen habt, wie ihr die Aufgabe angehen sollt, könnt ihr hier die Lösung anschauen. Wir empfehlen aber, in diesem Fall die vorherigen Praktika und diese Lösung genau nachzuvollziehen, um in den folgenden Praktika wieder voll einsteigen zu können.

[et_pb_dmb_code_snippet title=“Listing 1: Das C-Programm für die fünfte c4ev3-Praktikumsaufgabe.“ code=“I2luY2x1ZGUgPGV2My5oPgoKaW50IG1haW4odm9pZCkgewoJSW5pdEVWMygpOwoKCXdoaWxlICghQnV0dG9uSXNEb3duKEJUTlVQKSkgewoJCU9uRndkUmVnKE9VVF9CQywgMjUpOwoJCVdhaXQoU0VDXzEpOwoKCQlPZmYoT1VUX0JDKTsKCQlXYWl0KE1TXzEwMCk7CgoJCU9uRndkUmVnKE9VVF9CLCAyNSk7CgkJT2ZmKE9VVF9DKTsKCQlXYWl0KFNFQ18xKTsKCQlXYWl0KE1TXzUwMCk7CgoJCU9mZihPVVRfQkMpOwoJCVdhaXQoTVNfMTAwKTsKCX0KCglGcmVlRVYzKCk7CglyZXR1cm4gMDsKfQo=“ language=“java“ linenums=“on“ _builder_version=“3.23.3″ body_font=“||||||||“ body_font_size_tablet=“51″ body_line_height_tablet=“2″ header_font_size_tablet=“51″ header_line_height_tablet=“2″]I2luY2x1ZGUgPGV2My5oPgoKaW50IG1haW4odm9pZCkgewoJSW5pdEVWMygpOwoKCXdoaWxlICghQnV0dG9uSXNEb3duKEJUTlVQKSkgewoJCU9uRndkUmVnKE9VVF9CQywgMjUpOwoJCVdhaXQoU0VDXzEpOwoKCQlPZmYoT1VUX0JDKTsKCQlXYWl0KE1TXzEwMCk7CgoJCU9uRndkUmVnKE9VVF9CLCAyNSk7CgkJT2ZmKE9VVF9DKTsKCQlXYWl0KFNFQ18xKTsKCQlXYWl0KE1TXzUwMCk7CgoJCU9mZihPVVRfQkMpOwoJCVdhaXQoTVNfMTAwKTsKCX0KCglGcmVlRVYzKCk7CglyZXR1cm4gMDsKfQo=[/et_pb_dmb_code_snippet]