Tapahtumat#

Johdanto#

Tapahtumien avulla voit suorittaa funktioita rinnakkain. Sen sijaan, että kutsuisit funktioita peräkkäin, voit rekisteröidä useita funktioita samaan tapahtumaan ja laukaista ne kaikki kerralla. Jokainen rekisteröity funktio suoritetaan omassa säikeessään, jolloin robottisi voi suorittaa useita tehtäviä samanaikaisesti – kuten näyttää arvoja näytöllä ajon aikana.

Voit luoda ja käyttää tapahtumaa noudattamalla seuraavia ohjeita annetussa järjestyksessä:

  1. Luo tapahtuma käyttämällä Event.

  2. Rekisteröi funktio, joka laukeaa, kun tapahtuma Event lähetetään, kutsumalla tapahtumaevent objektia käyttäen funktiota argumenttina.

  3. Broadcast an Event:

    • broadcast — Käynnistää kaikki tapahtumaobjektin rekisteröidyt funktiot samanaikaisesti.

    • broadcast_and_wait — Käynnistää kaikki tapahtumaobjektin rekisteröidyt funktiot ja odottaa niiden päättymistä ennen jatkamista.

Luo tapahtuma#

Event luo tapahtumaobjektin, joka hallitsee funktion suoritusta erillisissä säikeissä.

Usage:
Event()

Parametri

Kuvaus

Tällä konstruktorilla ei ole parametreja.

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

Rekisteröi funktiot tapahtumaan#

Kun rekisteröit funktion tapahtumaan, se suoritetaan erillisessä säikeessä, kun tapahtuma lähetetään.

Usage:
event(callback, args)

Parametri

Kuvaus

event

Aiemmin luodun tapahtumaobjektin nimi.

callback

Aiemmin määritelty funktio, joka suoritetaan, kun tapahtuma lähetetään.

args

Valinnainen. Argumenttien tuple välitettäväksi takaisinkutsufunktiolle.

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

Lähetä tapahtuma#

broadcast#

broadcast laukaisee tapahtuman, joka käynnistää kaikki rekisteröidyt funktiot erillisissä säikeissä. Tämä metodi ei keskeytä minkään seuraavien funktioiden suoritusta.

Usage:
event.broadcast()

Parametri

Kuvaus

event

Aiemmin luodun tapahtumaobjektin nimi.

# 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 käynnistää tapahtuman, mutta odottaa kaikkien rekisteröityjen funktioiden päättymistä ennen kuin jatkaa seuraavilla funktioilla.

Usage:
event.broadcast_and_wait()

Parametri

Kuvaus

event

Aiemmin luodun tapahtumaobjektin nimi.

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