Trapos#

Introducción#

Los hilos permiten que un robot ejecute varias tareas simultáneamente dentro del mismo programa. Facilitan la multitarea, permitiendo que el robot realice acciones independientes al mismo tiempo.

Nota: Primero debe definir una función para usarla con un hilo.

Constructor – Crea e inicia nuevos hilos.

  • Thread – Inicia un nuevo hilo que ejecuta la función especificada en paralelo con el programa principal.

Acción: Controlar los hilos en ejecución.

  • stop – Detiene un hilo manualmente, útil para detener el comportamiento en segundo plano.

Constructor#

Thread#

Thread crea e inicia un hilo. Cuando creas un hilo, puedes nombrarlo para detenerlo cuando ya no sea necesario.

Uso:

my_thread = Thread(my_function)

Parámetros

Descripción

my_thread

Opcional. Un nombre para el nuevo hilo.

my_function

El nombre de una función definida previamente.

Nota: Una función debe siempre estar definida antes de ser llamada.

def move_square():
    # Move in a square path
    while True:
        arm.move_inc(100, 0, 0)
        arm.move_inc(0, 100, 0)
        arm.move_inc(-100, 0, 0)
        arm.move_inc(0, 100, 0)

move_square_thread = Thread(move_square)
signal_tower.set_color(SignalTower.BLUE, SignalTower.BLINK)

# Run multiple threads simultaneously
def move_square():
    # Move in a square path
    while True:
        arm.move_inc(100, 0, 0)
        arm.move_inc(0, 100, 0)
        arm.move_inc(-100, 0, 0)
        arm.move_inc(0, 100, 0)

def lights():
    while True:
        # Turn on all LEDs
        signal_tower.set_colors(SignalTower.ON, SignalTower.ON, SignalTower.ON, SignalTower.ON, SignalTower.ON)
        wait(0.25, SECONDS)
        # Turn on just the red LED
        signal_tower.set_colors(SignalTower.ON, SignalTower.OFF, SignalTower.OFF, SignalTower.OFF, SignalTower.OFF)
        wait(0.25, SECONDS)

move_square_thread = Thread(move_square)
lights_thread = Thread(lights)

Acción#

stop#

stop detiene un hilo manualmente, lo cual es útil cuando una tarea ya no es necesaria o cuando un programa necesita reiniciar hilos. Una vez que un hilo se detiene, no se puede reiniciar. Para volver a ejecutarlo, debe crear un nuevo hilo usando Thread.

Uso:

my_thread.stop()

Parámetros

Descripción

my_thread

Un objeto de hilo iniciado previamente. Este es el nombre asignado cuando se creó el hilo usando Thread.

"""
Run multiple threads simultaneously
Move the end effector, flash lights and display the x position at once
Stop blinking after 2 seconds
"""
def lights():
    while True:
        # Turn on all LEDs
        signal_tower.set_colors(SignalTower.ON, SignalTower.ON, SignalTower.ON, SignalTower.ON, SignalTower.ON)
        wait(0.25, SECONDS)
        # Turn on just the red LED
        signal_tower.set_colors(SignalTower.ON, SignalTower.OFF, SignalTower.OFF, SignalTower.OFF, SignalTower.OFF)
        wait(0.25, SECONDS)

def display_x():
    while True:
        brain.clear_row()
        brain.set_cursor(1, 1)
        brain.print("X Position: {}".format(arm.get_x()))
        wait(50, MSEC)

lights_thread = Thread(lights)     
display_x_thread = Thread(display_x)
arm.move_to(200, 140, 210)

wait(2, SECONDS)
lights_thread.stop()