Eventos#

Introducción#

Los eventos le permiten ejecutar funciones en paralelo. En lugar de llamar a funciones secuencialmente, puede registrar varias funciones en un evento y activarlas todas a la vez. Cada función registrada se ejecuta en su propio hilo, lo que permite a su robot realizar múltiples tareas simultáneamente, como mostrar valores en la pantalla mientras conduce.

Para crear y luego usar un Evento, siga estos pasos en orden:

  1. Crea el evento con Event.

  2. Registre una función para activarse cuando se transmita el evento Event llamando al objeto event con la función como argumento.

  3. Broadcast an Event:

    • broadcast: activa todas las funciones registradas en un objeto de evento para que se ejecuten simultáneamente.

    • broadcast_and_wait: activa todas las funciones registradas en un objeto de evento y espera a que finalicen antes de continuar.

Crear un evento#

Event crea un objeto de evento que administra la ejecución de funciones en subprocesos separados.

Usage:
Event()

Parámetro

Descripción

Este constructor no tiene parámetros.

# 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)

Registrar funciones en un evento#

Cuando registra una función en un evento, se ejecutará en un subproceso separado cuando se transmita el evento.

Usage:
event(callback, args)

Parámetro

Descripción

event

El nombre del objeto de evento creado anteriormente.

callback

Una función previamente definida para ejecutar cuando se transmite el evento.

args

Opcional. Una tupla de argumentos para pasar a la función de devolución de llamada.

# 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()

Difundir un evento#

broadcast#

broadcast desencadena un evento, iniciando todas las funciones registradas en subprocesos separados. Este método no detiene la ejecución de ninguna función posterior.

Usage:
event.broadcast()

Parámetro

Descripción

event

El nombre del objeto de evento creado anteriormente.

# 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 inicia un evento pero espera a que todas las funciones registradas terminen antes de continuar con las funciones posteriores.

Usage:
event.broadcast_and_wait()

Parámetro

Descripción

event

El nombre del objeto de evento creado anteriormente.

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