Eventos#

Introducción#

Los eventos permiten ejecutar funciones en paralelo mediante objetos de evento. En lugar de llamar a funciones o subprocesos uno tras otro, los eventos permiten registrar funciones y activarlas todas a la vez. Cada función registrada se ejecuta en su propio subproceso, lo que permite que el robot realice varias acciones simultáneamente, como hacer parpadear los TouchLED y conducir.

A continuación se muestra una lista de métodos y constructores disponibles:

  • Evento – Crea un nuevo objeto de evento.

  • evento – Registra una función en el objeto de evento, opcionalmente con argumentos.

  • broadcast – Activa todas las funciones registradas en un objeto de evento para que se ejecuten en paralelo.

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

Crear un objeto de evento#

El constructor ‘Event’ se utiliza para crear un objeto de evento que administra la ejecución de funciones en subprocesos separados.

Uso:
Evento()

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 se registra una función en un evento, se ejecutará en un hilo separado cuando se transmita el evento.

Uso:
evento(devolución de llamada, argumentos)

Parámetro

Descripción

evento

El nombre del objeto de evento creado previamente.

devolución de llamada

Una función que se define previamente para ejecutarse cuando se transmite el evento.

argumentos

Opcional. Una tupla que contiene los argumentos que se pasarán a la función de devolución de llamada. Consulte Uso de funciones con parámetros para obtener más información.

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

Transmisión#

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

Uso:
event.broadcast()

parámetro

descripción

evento

El nombre del objeto de evento creado previamente.

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

Transmitir y esperar#

broadcast_and_wait inicia un evento pero espera a que finalicen todas las funciones registradas antes de continuar con las funciones subsiguientes.

Uso:
event.broadcast_and_wait()

parámetro

descripción

evento

El nombre del objeto de evento creado previamente.

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