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:

  1. Erstelle das Ereignis mit Event.

  2. Registrieren Sie eine Funktion, die ausgelöst werden soll, wenn das Event übertragen wird, indem Sie das event Objekt mit der Funktion als Argument aufrufen.

  3. 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

event

Der Name des zuvor erstellten Ereignisobjekts.

callback

Eine zuvor definierte Funktion, die ausgeführt wird, wenn das Ereignis übertragen wird.

args

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

event

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

event

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.")