Lenken

 

Für das Hauptprojekt ganz wesentlich ist die Fähigkeit deines Roboters zu lenken. Die Standardsteuerung nimmt uns dabei viel Arbeit ab, indem sie automatisch beide Motoren koordiniert und lediglich eine Richtungs- und Leistungsangabe verlangt. Dabei steht 0 für geradeaus, -100 für maximal links und +100 für so weit nach rechts wie möglich. Die angegebene Motorleistungsstufe ist ebenfalls von -100 bis +100 zulässig, wobei -100 maximal rückwärts, +100 maximal vorwärts und 0 stillstehen bedeuten.

Dieses Beispielprogramm soll deinen Roboter unablässig immer stärker nach rechts einlenken und bei der Maximallenkrichtung +100 immer stärker nach links bis -100 einlenken. In der Folge soll wieder allmählich nach rechts bis zum Maximum eingelenkt werden und so weiter.

Video-Download

Am Display oben soll der Wert der Lenkrichtung (-100 bis +100) angegeben werden. Unterhalb soll "1" erscheinen, wenn sich der Wert der Lenkrichtung erhöht (also in Richtung +100 bewegt), andernfalls (bei einer Änderung der Lenkrichtung hin zu -100) "-1".

Video-Download

Wenn Programme größer werden, kann man schnell den Überblick über den Code verlieren. Zoomt man raus (Symbolleiste - Verkleinern), werden zwar die Programmierblöcke kleiner dargestellt, aber mehrere von ihnen können auf dem Monitor dargestellt werden.

In die andere Richtung geht's mit Vergrößern.

Will man wieder den Ausgangszustand (Zoomfaktor 100 %) herbeiführen, klickt man in der Symbolleiste einfach auf Zoom zurücksetzen.

Um sich mehrere Codestellen, die nicht alle aufgrund ihrer Größe auf dem Monitor auf einmal angezeigt werden können, anzuschauen, ist es oft recht bequem, in den Schwenk-Modus umzuschalten.

In diesem Modus lassen sich zwar keine neuen Blöcke von der Palette in den Programmierbereich ziehen oder einzelne Blöcke auswählen, aber dafür kann man ganz schnell durch das Programm "wandern". Probier's einfach einmal aus!

In den normalen Auswahl-Modus gelangt du wieder durch Symbolleiste - Auswählen.

Im übrigen kann man dem Code auch eigene hilfreiche Kommentare hinzufügen, um später das Programm besser lesen zu können oder dies auch anderen Personen zu erleichtern.

Kommentare - quasi "Beschriftungen" - machen vor allem beim Anlegen von Konstanten Sinn.

In unserem Programm benötigen wir aber nicht nur Konstanten, sondern auch Variablen, die wir zunächst einmal auf Anfangswerte setzen. Der Wert der Lenkrichtung (Richtung) sei zunächst 0 (= geradeaus), die Richtungsveraenderung (aufgrund Platzmangels meisten abgekürzt zu "Richtun...") beginne mit 1 (= Lenkrichtung bewege sich zunächst in Richtung +100).

Wie auch in Lektion 9 soll das Programm stoppen, sobald eine Stein-Taste gedrückt wird.

Wie auch Sprites in Snap! kennt dein Roboter Fallunterscheidungen.

Den passenden Programmierblock Schalter findest du in der Palette in der Rubrik Ablauf-Regelung.
In diesem Beispiel ist besonders der Modus Numerisch interessant, denn: Sobald die Variable Richtung den Wert +100 erreicht, muss sie wieder bis -100 hinuntergezählt werden. Das heißt, die Variable Richtungsveraenderung muss in diesem Fall auf -1 gesetzt werden. Andersrum verhält es sich, sobald Richtung -100 erreicht. Dann muss Richtungsveraenderung wieder auf +1 gesetzt und Richtung wieder raufgezählt werden. Falls Richtung irgendeinen Wert zwischen -100 und +100 innehat, soll einfach weitergezählt werden. Du brauchst also einen Schalter-Block mit 3 Fällen:

  1. Richtung = +100: Richtungsaenderung muss auf -1 gesetzt werden.
  2. Richtung = -100: Richtungsaenderung muss auf +1 gesetzt werden.
  3. In allen anderen Fällen muss gar nichts verändert werden.

Nach dem Schalter mit dem möglichen Überschreiben von Richtungsaenderung kann ein Warte-Block platziert werden, damit der Roboter nicht gar so hektisch seine Richtung ändert. Verändere doch einfach einmal den Wert der Konstanten mit dem Kommentar "Pause nach Lenken" und schaue, wie sich dadurch das Verhalten deines Roboters ändert.

Der Wert der Variablen Richtung steuert also die Richtung, die der Roboter einschlägt. Daher muss sie innerhalb der Schleife regelmäßig ausgelesen und an den Standardsteuerung-Block geschickt werden - und damit wir die aktuellen Werte auch auf dem Display des EV3-Bricks sehen, am besten auch gleich an einen Anzeige-Block.

Jetzt fehlt nur noch ein Block, der den Wert der Variablen Richtung korrekt ändert. In unserem Schalter wird zwar Richtung gelesen, aber geändert wird dort nur Richtungsaenderung. Hast du eine Idee, was und wie du deinem Roboter befiehlst, Richtung fehlerfrei zu berechnen?

Ganz einfach! In Snap! würde das beispielsweise so aussehen:

Du brauchst innerhalb der Schleife also nur Richtung und Richtungsaenderung addieren und das Ergebnis in die Variable Richtung schreiben:

Fertig ist der Code! Verschaffe deinem Roboter genügend Platz und probiere das Programm gleich aus!