Pasākumi#
Ievads#
Notikumi ļauj funkcijas palaist paralēli. Tā vietā, lai funkcijas izsauktu secīgi, varat reģistrēt vairākas funkcijas vienam notikumam un aktivizēt tās visas vienlaikus. Katra reģistrētā funkcija darbojas savā pavedienā, ļaujot robotam vienlaikus veikt vairākus uzdevumus, piemēram, braukšanas laikā attēlot vērtības ekrānā.
Lai izveidotu un pēc tam izmantotu notikumu, veiciet tālāk norādītās darbības norādītajā secībā:
Izveidojiet notikumu ar
Event.Reģistrējiet funkciju, kas tiek aktivizēta, kad tiek pārraidīts
Eventizsaucoteventobjektu ar funkciju kā argumentu.Broadcast an
Event:broadcast— Ieslēdz visas reģistrētās funkcijas notikuma objektā, lai tās darbotos vienlaicīgi.broadcast_and_wait— Aktivizē visas reģistrētās funkcijas notikuma objektā un gaida, līdz tās ir pabeigtas, pirms turpināt.
Izveidot notikumu#
Event notikums izveido notikuma objektu, kas pārvalda funkciju izpildi atsevišķos pavedienos.
Usage:
Event()
Parametrs |
Apraksts |
|---|---|
Šim konstruktoram nav parametru. |
# 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)
Funkciju reģistrēšana notikumam#
Reģistrējot funkciju notikumam, tā tiks izpildīta atsevišķā pavedienā, kad notikums tiks pārraidīts.
Usage:
event(callback, args)
Parametrs |
Apraksts |
|---|---|
|
Iepriekš izveidotā notikuma objekta nosaukums. |
|
Iepriekš definēta funkcija, kas jāizpilda, kad notikums tiek pārraidīts. |
|
Neobligāti. Argumentu tuple kopa, kas jānodod atzvanīšanas funkcijai. |
# 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()
Notikuma pārraidīšana#
broadcast#
broadcast aktivizē notikumu, startējot visas reģistrētās funkcijas atsevišķos pavedienos. Šī metode neaptur nevienas nākamās funkcijas izpildi.
Usage:
event.broadcast()
Parametrs |
Apraksts |
|---|---|
|
Iepriekš izveidotā notikuma objekta nosaukums. |
# 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 sāk notikumu, bet gaida, līdz visas reģistrētās funkcijas ir pabeigušas darbību, pirms turpina ar nākamajām funkcijām.
Usage:
event.broadcast_and_wait()
Parametrs |
Apraksts |
|---|---|
|
Iepriekš izveidotā notikuma objekta nosaukums. |
# 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.")