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:

  1. Maak het evenement aan met Event.

  2. Register a function to trigger when the Event is broadcast by calling the event object with the function as an argument.

  3. 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 the screen while moving forward
# Create move_event as an Event object
move_event = Event()

def blink_screen():
    while True:
        brain.screen.clear_screen(Color.RED)
        wait(0.5, SECONDS)
        brain.screen.clear_screen()
        wait(0.5, SECONDS)

move_event(blink_screen)
move_event.broadcast()
drivetrain.drive(FORWARD)

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

event

De naam van het eerder aangemaakte gebeurtenisobject.

callback

Een vooraf gedefinieerde functie die wordt uitgevoerd wanneer de gebeurtenis wordt uitgezonden.

args

Optioneel. Een tuple met argumenten die aan de callbackfunctie moeten worden doorgegeven.

# Blink the screen while turning
move_event = Event()

def blink_screen():
    while True:
        brain.screen.clear_screen(Color.RED)
        wait(0.5, SECONDS)
        brain.screen.clear_screen()
        wait(0.5, SECONDS)

def turning():
    drivetrain.turn(RIGHT)

# Register multiple functions to the Event object
move_event(blink_screen)
move_event(turning)

move_event.broadcast()

# Move in a specified direction
move_event = Event()

def move_distance(movement_angle):
    drivetrain.turn_for(RIGHT, movement_angle, DEGREES)
    drivetrain.drive_for(FORWARD, 100, MM)

# 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

event

De naam van het eerder aangemaakte gebeurtenisobject.

# Blink the screen while moving forward
# Create move_event as an Event object
move_event = Event()

def blink_screen():
    while True:
        brain.screen.clear_screen(Color.RED)
        wait(0.5, SECONDS)
        brain.screen.clear_screen()
        wait(0.5, SECONDS)

move_event(blink_screen)
move_event.broadcast()
drivetrain.drive(FORWARD)

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

event

De naam van het eerder aangemaakte gebeurtenisobject.

# Move after the screen is pressed
move_event = Event()

def move_and_turn():
    drivetrain.drive_for(FORWARD, 150, MM)
    drivetrain.turn_for(RIGHT, 90)

move_event(move_and_turn)

while True:
    if brain.buttonCheck.pressing():
        move_event.broadcast_and_wait()
        break
brain.screen.print("Movement done.")