Olaylar#

giriiş#

Olaylar, fonksiyonları paralel olarak çalıştırmanıza olanak tanır. Fonksiyonları sırayla çağırmak yerine, bir olaya birden fazla fonksiyon kaydedebilir ve hepsini aynı anda tetikleyebilirsiniz. Kaydedilen her fonksiyon kendi iş parçacığında çalışır ve robotunuzun aynı anda birden fazla görevi yerine getirmesini sağlar; örneğin, sürüş sırasında ekranda değerleri görüntülemek gibi.

Bir etkinlik oluşturmak ve ardından kullanmak için şu adımları sırasıyla izleyin:

  1. Event ile olayı oluşturun.

  2. Event nesnesi fonksiyonu argüman olarak çağırarak event yayınlandığında tetiklenecek bir fonksiyon kaydedin.

  3. Broadcast an Event:

    • broadcast – Bir olay nesnesinde kayıtlı tüm işlevlerin eş zamanlı olarak çalışmasını tetikler.

    • broadcast_and_wait – Bir olay nesnesinde kayıtlı tüm işlevleri tetikler ve devam etmeden önce bunların bitmesini bekler.

Etkinlik Oluştur#

Event ayrı iş parçacıklarında fonksiyon yürütmeyi yöneten bir olay nesnesi oluşturur.

Usage:
Event()

Parametre

Tanım

Bu yapıcı fonksiyonun parametresi yoktur.

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

Bir Etkinliğe Fonksiyonları Kaydet#

Bir fonksiyonu bir olaya kaydettiğinizde, olay yayınlandığında ayrı bir iş parçacığında çalıştırılır.

Usage:
event(callback, args)

Parametre

Tanım

event

Daha önce oluşturulan etkinlik nesnesinin adı.

callback

Olay yayınlandığında yürütülecek önceden tanımlanmış bir fonksiyon.

args

İsteğe bağlı. Geri çağrı fonksiyonuna iletilecek argümanların tuple.

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

Bir Etkinlik Yayınla#

broadcast#

broadcast , bir olayı tetikler ve kayıtlı tüm işlevleri ayrı iş parçacıklarında başlatır. Bu yöntem, sonraki işlevlerin yürütülmesini duraklatmaz.

Usage:
event.broadcast()

Parametre

Tanım

event

Daha önce oluşturulan etkinlik nesnesinin adı.

# 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 bir olayı başlatır ancak sonraki işlevlere devam etmeden önce kayıtlı tüm işlevlerin bitmesini bekler.

Usage:
event.broadcast_and_wait()

Parametre

Tanım

event

Daha önce oluşturulan etkinlik nesnesinin adı.

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