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