Draden#

Invoering#

Threads stellen een robot in staat om meerdere taken tegelijkertijd binnen hetzelfde programma uit te voeren. Ze maken multitasking mogelijk, waardoor de robot onafhankelijke acties tegelijkertijd kan uitvoeren.

Opmerking: Je moet eerst een functie definiëren om deze met een thread te kunnen gebruiken.

Constructor – Nieuwe threads aanmaken en starten.

  • Thread – Start een nieuwe thread die de opgegeven functie parallel met het hoofdprogramma uitvoert.

Actie – Beheer actieve threads.

  • stop – Stopt een thread handmatig, handig om achtergrondgedrag te stoppen.

Constructor#

Thread#

Thread maakt en start een thread. Wanneer je een thread maakt, kun je deze een geven om hem te stoppen wanneer hij niet langer nodig is.

Gebruik:

my_thread = Thread(my_function)

Parameters

Beschrijving

my_thread

Optioneel. Een naam voor de nieuwe thread.

my_function

De naam van een eerder gedefinieerde functie.

Let op: Een functie moet altijd gedefinieerd zijn voordat deze wordt aangeroepen.

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)

Actie#

stop#

stop stopt een thread handmatig, wat handig is wanneer een taak niet langer nodig is of wanneer een programma threads moet resetten. Zodra een thread is gestopt, kan deze niet opnieuw worden gestart. Om deze opnieuw uit te voeren, moet u een nieuwe thread maken met Thread.

Gebruik:

my_thread.stop()

Parameters

Beschrijving

my_thread

Een eerder gestart threadobject. Dit is de naam die is toegewezen toen de thread werd gemaakt met behulp van 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()