الفعاليات#

مقدمة#

تتيح لك الأحداث تشغيل الدوال بالتوازي. فبدلاً من استدعاء الدوال بالتتابع، يمكنك تسجيل عدة دوال في حدث واحد وتشغيلها جميعاً دفعة واحدة. تعمل كل دالة مسجلة في سلسلة عمليات خاصة بها، مما يمكّن الروبوت من أداء مهام متعددة في وقت واحد، مثل عرض القيم على الشاشة أثناء القيادة.

لإنشاء حدث واستخدامه، اتبع الخطوات التالية بالترتيب:

  1. أنشئ الحدث باستخدام Event.

  2. قم بتسجيل دالة لتشغيلها عند بث Event عن طريق استدعاء event object مع الدالة كوسيط.

  3. Broadcast an Event:

    • broadcast – يقوم بتشغيل جميع الوظائف المسجلة في كائن الحدث بشكل متزامن.

    • broadcast_and_wait – يقوم بتشغيل جميع الوظائف المسجلة في كائن الحدث وينتظر حتى تنتهي قبل المتابعة.

إنشاء حدث#

Event بإنشاء كائن حدث يدير تنفيذ الوظائف في سلاسل عمليات منفصلة.

Usage:
Event()

المعلمة

وصف

لا يحتوي هذا المُنشئ على أي معلمات.

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

تسجيل الوظائف في حدث#

عند تسجيل دالة لحدث ما، سيتم تنفيذها في سلسلة رسائل منفصلة عند بث الحدث.

Usage:
event(callback, args)

المعلمة

وصف

event

اسم كائن الحدث الذي تم إنشاؤه مسبقًا.

callback

دالة مُعرَّفة مسبقاً لتنفيذها عند بث الحدث.

args

Optional. A tuple of arguments to pass to the callback function.

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

بث حدث#

broadcast#

يؤدي بث broadcast حدث، مما يبدأ تشغيل جميع الدوال المسجلة في سلاسل عمليات منفصلة. لا توقف هذه الطريقة تنفيذ أي دوال لاحقة.

Usage:
event.broadcast()

المعلمة

وصف

event

اسم كائن الحدث الذي تم إنشاؤه مسبقًا.

# 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 يبدأ حدثًا ولكنه ينتظر حتى تنتهي جميع الوظائف المسجلة قبل المتابعة مع الوظائف اللاحقة.

Usage:
event.broadcast_and_wait()

المعلمة

وصف

event

اسم كائن الحدث الذي تم إنشاؤه مسبقًا.

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