Acara#

Perkenalan#

Event memungkinkan Anda menjalankan fungsi secara paralel. Alih-alih memanggil fungsi secara berurutan, Anda dapat mendaftarkan beberapa fungsi ke suatu event dan memicunya sekaligus. Setiap fungsi yang terdaftar berjalan dalam thread-nya sendiri, memungkinkan robot Anda untuk melakukan banyak tugas secara bersamaan—seperti menampilkan nilai di layar sambil mengemudi.

Untuk membuat dan kemudian menggunakan sebuah Acara, ikuti langkah-langkah berikut secara berurutan:

  1. Buat acara dengan Event.

  2. Register a function to trigger when the Event is broadcast by calling the event object with the function as an argument.

  3. Broadcast an Event:

    • broadcast – Memicu semua fungsi terdaftar dalam objek peristiwa untuk berjalan secara bersamaan.

    • broadcast_and_wait – Memicu semua fungsi terdaftar dalam objek peristiwa dan menunggu hingga selesai sebelum melanjutkan.

Buat Acara#

Event membuat objek event yang mengelola eksekusi fungsi dalam thread terpisah.

Usage:
Event()

Parameter

Keterangan

Konstruktor ini tidak memiliki parameter.

# Blink LEDs while moving forward
# Create move_event as an Event object
move_event = Event()

def blink_leds():
    while True:
        robot.led.on(ALL_LEDS, RED)
        wait(0.5, SECONDS)
        robot.led.on(ALL_LEDS, BLACK)
        wait(0.5, SECONDS)

move_event(blink_leds)
move_event.broadcast()
robot.move_at(0)

Mendaftarkan Fungsi ke Suatu Acara#

Saat Anda mendaftarkan sebuah fungsi ke suatu event, fungsi tersebut akan dieksekusi dalam thread terpisah ketika event tersebut disiarkan.

Usage:
event(callback, args)

Parameter

Keterangan

event

Nama objek event yang telah dibuat sebelumnya.

callback

Fungsi yang telah didefinisikan sebelumnya untuk dieksekusi ketika peristiwa tersebut disiarkan.

args

Opsional. Sebuah tuple argumen untuk diteruskan ke fungsi callback.

# Blink LEDs while moving forward and turning
move_event = Event()

def blink_leds():
    while True:
        robot.led.on(ALL_LEDS, RED)
        wait(0.5, SECONDS)
        robot.led.on(ALL_LEDS, BLACK)
        wait(0.5, SECONDS)

def turning():
    robot.turn(RIGHT)

# Register multiple functions to the Event object
move_event(blink_leds)
move_event(turning)

move_event.broadcast()

# Move in a specified direction
move_event = Event()

def move_distance(movement_angle):
    robot.move_for(50, movement_angle)

# Change the parameter to modify how the robot moves
move_event(move_distance, (180,))
move_event.broadcast()

Siarkan Acara#

broadcast#

broadcast memicu suatu kejadian, memulai semua fungsi yang terdaftar dalam thread terpisah. Metode ini tidak menghentikan eksekusi fungsi selanjutnya.

Usage:
event.broadcast()

Parameter

Keterangan

event

Nama objek event yang telah dibuat sebelumnya.

# Blink LEDs while moving forward and turning
move_event = Event()

def blink_leds():
    while True:
        robot.led.on(ALL_LEDS, RED)
        wait(0.5, SECONDS)
        robot.led.on(ALL_LEDS, BLACK)
        wait(0.5, SECONDS)


move_event(blink_leds)

# Trigger the move_event Event
move_event.broadcast()
robot.move_at(0)

broadcast_and_wait#

broadcast_and_wait memulai sebuah event tetapi menunggu semua fungsi yang terdaftar selesai sebelum melanjutkan ke fungsi berikutnya.

Usage:
event.broadcast_and_wait()

Parameter

Keterangan

event

Nama objek event yang telah dibuat sebelumnya.

# Move after the screen is pressed
move_event = Event()

def move_and_turn():
    robot.move_for(50, 0)
    robot.turn_for(RIGHT, 90)

move_event(move_and_turn)

while True:
    if robot.screen.pressing():
        move_event.broadcast_and_wait()
        break
robot.screen.print("Movement done.")