Veranstaltungen#
Einführung#
Ereignisse ermöglichen die parallele Ausführung von Funktionen. Anstatt Funktionen nacheinander aufzurufen, können Sie mehrere Funktionen bei einem Ereignis registrieren und diese gleichzeitig auslösen. Jede registrierte Funktion läuft in einem eigenen Thread, sodass Ihr Roboter mehrere Aufgaben gleichzeitig ausführen kann – beispielsweise Werte auf dem Bildschirm während der Fahrt anzeigen.
Um ein Ereignis zu erstellen und anschließend zu verwenden, befolgen Sie diese Schritte in dieser Reihenfolge:
Erstelle das Ereignis mit
Event.Registrieren Sie eine Funktion, die ausgelöst werden soll, wenn das
Eventübertragen wird, indem Sie daseventObjekt mit der Funktion als Argument aufrufen.Broadcast an
Event:broadcast– Löst aus, dass alle registrierten Funktionen in einem Ereignisobjekt gleichzeitig ausgeführt werden.broadcast_and_wait– Löst alle registrierten Funktionen in einem Ereignisobjekt aus und wartet, bis diese abgeschlossen sind, bevor fortgefahren wird.
Ein Ereignis erstellen#
Event erstellt ein Ereignisobjekt, das die Funktionsausführung in separaten Threads verwaltet.
Usage:
Event()
Parameter |
Beschreibung |
|---|---|
Dieser Konstruktor hat keine Parameter. |
# Blink LEDs while moving forward
# Create move_event as an Event object
move_event = Event()
def blink_leds():
while True:
robot.led.on(ALL_LEDS, RED)
wait(0.5, SECONDS)
robot.led.on(ALL_LEDS, BLACK)
wait(0.5, SECONDS)
move_event(blink_leds)
move_event.broadcast()
robot.move_at(0)
Funktionen einem Ereignis zuordnen#
Wenn Sie eine Funktion für ein Ereignis registrieren, wird diese in einem separaten Thread ausgeführt, wenn das Ereignis übertragen wird.
Usage:
event(callback, args)
Parameter |
Beschreibung |
|---|---|
|
Der Name des zuvor erstellten Ereignisobjekts. |
|
Eine zuvor definierte Funktion, die ausgeführt wird, wenn das Ereignis übertragen wird. |
|
Optional. Ein Tupel von Argumenten, die an die Callback-Funktion übergeben werden sollen. |
# Blink LEDs while moving forward and turning
move_event = Event()
def blink_leds():
while True:
robot.led.on(ALL_LEDS, RED)
wait(0.5, SECONDS)
robot.led.on(ALL_LEDS, BLACK)
wait(0.5, SECONDS)
def turning():
robot.turn(RIGHT)
# Register multiple functions to the Event object
move_event(blink_leds)
move_event(turning)
move_event.broadcast()
# Move in a specified direction
move_event = Event()
def move_distance(movement_angle):
robot.move_for(50, movement_angle)
# Change the parameter to modify how the robot moves
move_event(move_distance, (180,))
move_event.broadcast()
Eine Veranstaltung übertragen#
broadcast#
Der Befehl broadcast löst ein Ereignis aus und startet alle registrierten Funktionen in separaten Threads. Die Ausführung nachfolgender Funktionen wird dadurch nicht unterbrochen.
Usage:
event.broadcast()
Parameter |
Beschreibung |
|---|---|
|
Der Name des zuvor erstellten Ereignisobjekts. |
# Blink LEDs while moving forward and turning
move_event = Event()
def blink_leds():
while True:
robot.led.on(ALL_LEDS, RED)
wait(0.5, SECONDS)
robot.led.on(ALL_LEDS, BLACK)
wait(0.5, SECONDS)
move_event(blink_leds)
# Trigger the move_event Event
move_event.broadcast()
robot.move_at(0)
broadcast_and_wait#
broadcast_and_wait startet ein Ereignis, wartet aber, bis alle registrierten Funktionen abgeschlossen sind, bevor mit den nachfolgenden Funktionen fortgefahren wird.
Usage:
event.broadcast_and_wait()
Parameter |
Beschreibung |
|---|---|
|
Der Name des zuvor erstellten Ereignisobjekts. |
# Move after the screen is pressed
move_event = Event()
def move_and_turn():
robot.move_for(50, 0)
robot.turn_for(RIGHT, 90)
move_event(move_and_turn)
while True:
if robot.screen.pressing():
move_event.broadcast_and_wait()
break
robot.screen.print("Movement done.")