Evenementen#
Invoering#
Met gebeurtenissen kunt u functies parallel uitvoeren. In plaats van functies sequentieel aan te roepen, kunt u meerdere functies aan een gebeurtenis koppelen en ze allemaal tegelijk activeren. Elke geregistreerde functie wordt in een eigen thread uitgevoerd, waardoor uw robot meerdere taken tegelijk kan uitvoeren, zoals het weergeven van waarden op het scherm tijdens het rijden.
Om een evenement aan te maken en te gebruiken, volg je deze stappen in de juiste volgorde:
Maak het evenement aan met
Event.Register a function to trigger when the
Eventis broadcast by calling theeventobject with the function as an argument.Broadcast an
Event:broadcast– Activeert alle geregistreerde functies in een gebeurtenisobject om gelijktijdig te worden uitgevoerd.broadcast_and_wait– Activeert alle geregistreerde functies in een gebeurtenisobject en wacht tot ze klaar zijn voordat verder wordt gegaan.
Een evenement aanmaken#
Event creëert een gebeurtenisobject dat de uitvoering van functies in afzonderlijke threads beheert.
Usage:
Event()
Parameter |
Beschrijving |
|---|---|
Deze constructor heeft geen parameters. |
# 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)
Functies registreren voor een evenement#
Wanneer je een functie aan een gebeurtenis koppelt, wordt deze in een aparte thread uitgevoerd zodra de gebeurtenis wordt uitgezonden.
Usage:
event(callback, args)
Parameter |
Beschrijving |
|---|---|
|
De naam van het eerder aangemaakte gebeurtenisobject. |
|
Een vooraf gedefinieerde functie die wordt uitgevoerd wanneer de gebeurtenis wordt uitgezonden. |
|
Optioneel. Een tuple met argumenten die aan de callbackfunctie moeten worden doorgegeven. |
# 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()
Een evenement uitzenden#
broadcast#
broadcast activeert een gebeurtenis, waardoor alle geregistreerde functies in aparte threads worden gestart. Deze methode onderbreekt de uitvoering van eventuele daaropvolgende functies niet.
Usage:
event.broadcast()
Parameter |
Beschrijving |
|---|---|
|
De naam van het eerder aangemaakte gebeurtenisobject. |
# 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 start een gebeurtenis, maar wacht tot alle geregistreerde functies zijn voltooid voordat de volgende functies worden uitgevoerd.
Usage:
event.broadcast_and_wait()
Parameter |
Beschrijving |
|---|---|
|
De naam van het eerder aangemaakte gebeurtenisobject. |
# 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.")