DU LERNST HIER... |
wie du die Motoren und LEDs deines Roboters programmieren kannst. |
MUSTERBEISPIELE |
from grobot import * forward() delay(2000) left() delay(550) forward() delay(2000) stop() Für die Steuerung des Roboters kannst du auch sogenannte blockierende Befehle verwenden. Mit forward(2000) fährt der Roboter während 2000 Millisekunden vorwärts, mit left(550) dreht er während 550 Millisekunden nach links. from grobot import * forward(2000) left(550) forward(2000) Ein Nachteil der blockierenden Befehle, wie z.B. forward(2000) ist, dass der Roboter während 2000 ms keine weitere Befehle entgegen nehmen kann. Mit forward() (ohne Zeitangabe) wird der Roboter in die Vorwärtsbewegung versetzt und bleibt in diesem Zustand so lange bis er einen Befehl erhält, den Zustand der Motoren zu ändern. Während dieser Zeit kann er andere Befehle entgegen nehmen, z. B. Sensorwerte zurückmelden. |
from grobot import * forward() delay(4000) backward() setLED(1) delay(3500) setLED(0) delay(500) stop()
|
from grobot import * setSpeed(40) leftArc(0.2) delay(5000) rightArc(0.2) delay(5000) stop()
|
MERKE DIR... |
Für die Steuerung des Roboters stehen die folgende Befehle zur Verfügung:
Programmausführung abbrechen: Du kannst alle Beispiele auch im Simulationsmodus ausführen. Um ein Programm zu starten, klickst du anstelle des Robotik-Buttons auf den grünen Run-Pfeil. Willst du im Grafikfenster die Roboterspuren anzeigen lassen, fügst du nach der Importzeile folgende Zeile ein:
|
ZUM SELBST LÖSEN |
|
ZUSATZSTOFF: MOTOREN EINZELN STEUERN |
Die Befehle forward(), left() usw. steuern das ganze Fahrwerk, das aus zwei Motoren besteht. Man kann aber auch die einzelnen Motoren einschalten und ihre Geschwindigkeit regeln. Mit motL.rotate(speed) wird der linke Motor in die Vorwärtsbewegung versetzt und rotiert mit der Geschwindigkeit speed. Für die positiven speed-Werte rotiert der Motor vorwärts, bei negativer Werten rückwärts und für speed = 0 hält der Motor an. Entsprechend funktioniert der Befehl motR.rotate(speed) für den rechten Motor. |
from grobot import * motL.rotate(50) delay(3000) motL.rotate(-30) delay(3000) motL.rotate(0)
|
ZUM SELBST LÖSEN |
|
Die Unterscheidung zwischen blockierenden und nicht-blockierenden Funktionen ist von grosser Wichtigkeit weit über die Robotik hinaus. Sie ist aber für Programmieranfänger keineswegs evident und führt sogar für Fortgeschrittene immer wieder zu Schwierigkeiten.
Die Robotik ist ein hervorragend geeignetes Betätigungsfeld für "das Denken in Zuständen". Da wir auf die Zustansprogrammierung einen grossen Wert legen, verwenden wir in diesem Lernprogramm fast aussliesslich die nichtblockierenden Befehle, obwohl die Programme dadurch etwas länger werden. Für die Schülerinnen und Schüler ist es aber einfacher, als zwischen blockierenden und nichtblockierenden Befehlen zu welchseln.