ข้อความ#

การแนะนำ#

หุ่นยนต์เขียนโปรแกรม VEX AIM สองตัวสามารถเชื่อมต่อกันได้เพื่อให้สามารถสื่อสารกันได้ระหว่างการทำงาน วิธีการส่งข้อความช่วยให้หุ่นยนต์ตัวหนึ่งส่งข้อความไปยังหุ่นยนต์อีกตัวได้ ข้อความอาจประกอบด้วยข้อความธรรมดา หรือข้อความที่มีตัวเลขได้สูงสุดสามตัว

ข้อความที่ได้รับจะถูกจัดเก็บในคิวแบบเข้าก่อนออกก่อน (FIFO) ซึ่งหมายความว่าข้อความแรกที่ได้รับจะเป็นข้อความแรกที่จะถูกอ่าน

ใช้ is_message_available เพื่อตรวจสอบว่าข้อความพร้อมอ่านหรือไม่ จากนั้นใช้ get_message เพื่ออ่านข้อความถัดไป หากข้อความนั้นมีตัวเลขด้วย ให้ใช้ get_message_and_data เพื่ออ่านข้อความและตัวเลขพร้อมกัน

หมายเหตุ: ในการส่งและรับข้อความ หุ่นยนต์ทั้งสองตัวต้องเชื่อมต่อกัน และหุ่นยนต์ทั้งสองตัวต้องกำลังทำงานในโปรเจกต์ที่ใช้วิธีการส่งข้อความ

ด้านล่างนี้คือรายการวิธีการทั้งหมด:

การกระทำ — ส่งข้อความระหว่างหุ่นยนต์

  • send_message — ส่งข้อความและหมายเลขได้สูงสุดสามหมายเลขไปยังหุ่นยนต์ที่เชื่อมโยง

ตัวรับข้อมูล — อ่านข้อความหรือตรวจสอบสถานะการเชื่อมต่อ

  • get_message — ส่งคืนข้อความที่ได้รับถัดไป

  • get_message_and_data — ส่งคืนข้อความและหมายเลขที่ได้รับถัดไป

  • is_connected — คืนค่าว่าหุ่นยนต์เชื่อมต่อกับหุ่นยนต์ตัวอื่นหรือไม่

  • is_message_available — คืนค่าว่าข้อความพร้อมให้อ่านหรือไม่

  • get_name — ส่งคืนชื่อของหุ่นยนต์ที่เชื่อมโยง

ฟังก์ชันเรียกกลับ — เรียกใช้ฟังก์ชันเมื่อเกิดเหตุการณ์ข้อความ

  • handle_message — เรียกใช้ฟังก์ชันเมื่อได้รับข้อความที่ระบุ

  • connected — เรียกใช้ฟังก์ชันเมื่อหุ่นยนต์เชื่อมต่อกับหุ่นยนต์ตัวอื่น

  • disconnected — เรียกใช้ฟังก์ชันเมื่อหุ่นยนต์ไม่ได้เชื่อมต่อกับหุ่นยนต์ตัวอื่นอีกต่อไป

การกระทำ#

send_message#

send_message ส่งข้อความและตัวเลขได้สูงสุดสามตัวไปยังหุ่นยนต์ที่เชื่อมต่ออยู่ ใช้เมธอดนี้กับหุ่นยนต์ตัวหนึ่งเมื่อหุ่นยนต์อีกตัวต้องการรับคำสั่ง สัญญาณ หรือข้อมูลสั้นๆ ส่งเฉพาะข้อความเมื่อข้อความนั้นเพียงพอแล้ว เพิ่มตัวเลขเมื่อข้อความต้องการค่าที่เกี่ยวข้อง เช่น การส่ง “heading” พร้อมกับค่าทิศทางปัจจุบันของหุ่นยนต์

บนหุ่นยนต์ผู้รับ ให้ใช้ is_message_available เพื่อตรวจสอบว่าข้อความมาถึงแล้ว จากนั้นใช้ get_message สำหรับข้อความที่เป็นข้อความอย่างเดียว หรือ get_message_and_data สำหรับข้อความที่มีตัวเลข

Usage:
robot.link.send_message(message, arg1, arg2, arg3)

พารามิเตอร์

คำอธิบาย

message

ข้อความที่จะส่งไปยังหุ่นยนต์ที่เชื่อมต่ออยู่

arg1

(ไม่บังคับ) หมายเลขโทรศัพท์ที่จะส่งไปพร้อมกับข้อความ

arg2

(ไม่บังคับ) หมายเลขโทรศัพท์ที่สองที่จะส่งไปพร้อมกับข้อความ

arg3

(ไม่บังคับ) หมายเลขโทรศัพท์ที่สามที่จะส่งไปพร้อมกับข้อความ

ตัวอย่าง

รหัสสำหรับหุ่นยนต์ 1

# Press the screen to tell Robot 2 which way to turn
robot.screen.print("Robot 1")

while not robot.screen.pressing():
    wait(5, MSEC)

robot.link.send_message("right")

รหัสสำหรับหุ่นยนต์ 2

# Turn in the direction that Robot 1 sends
robot.screen.print("Robot 2")

while not robot.link.is_message_available():
    wait(5, MSEC)

direction = robot.link.get_message()

if direction == "left":
    robot.turn_for(LEFT, 90)
elif direction == "right":
    robot.turn_for(RIGHT, 90)

# Robot 1: continuously send the current heading to Robot 2
robot.screen.print("Robot 1")

while True:
    robot.link.send_message("heading", robot.inertial.get_heading())
    wait(50, MSEC)

# Robot 2: turn to match Robot 1's heading
robot.screen.print("Robot 2")

while True:
    if robot.link.is_message_available():
        message, heading = robot.link.get_message_and_data()
        robot.turn_to(heading)

    wait(50, MSEC)

ผู้รับ#

get_message#

get_message ส่งคืนข้อความตัวอักษรที่ได้รับถัดไปจากคิวข้อความ ใช้วิธีนี้กับหุ่นยนต์ที่รับข้อความเมื่อหุ่นยนต์ที่เชื่อมโยงส่งข้อความตัวอักษรเท่านั้น ลำดับทั่วไปคือการใช้ is_message_available เพื่อตรวจสอบว่าข้อความมาถึงแล้ว จากนั้นใช้ get_message ก่อนที่จะแสดง เปรียบเทียบ หรือใช้ข้อความที่ส่งคืนในวิธีอื่น

ใช้ send_message บนหุ่นยนต์ตัวอื่นเพื่อส่งข้อความแบบข้อความอย่างเดียว

Usage:
robot.link.get_message(timeout)

พารามิเตอร์

คำอธิบาย

timeout

ตัวเลือกเสริม ระยะเวลาสูงสุด (มิลลิวินาที) ที่จะรอข้อความก่อนดำเนินการต่อ ค่าเริ่มต้นคือ 1000

ตัวอย่าง

รหัสสำหรับหุ่นยนต์ 1

# Press the screen to send a message to Robot 2
robot.screen.print("Robot 1")

while not robot.screen.pressing():
    wait(5, MSEC)

robot.link.send_message("Hello, Robot 2!")

รหัสสำหรับหุ่นยนต์ 2

# Display the message sent by Robot 1
robot.screen.print("Robot 2")
robot.screen.next_row()

while not robot.link.is_message_available():
    wait(5, MSEC)

message = robot.link.get_message()
robot.screen.print(message)

get_message_and_data#

get_message_and_data ส่งคืนข้อความและตัวเลขที่ได้รับถัดไปจากคิวข้อความในรูปแบบทูเปิล ใช้วิธีนี้กับหุ่นยนต์ที่รับข้อความเมื่อหุ่นยนต์ที่เชื่อมโยงส่งข้อความที่มีตัวเลขหนึ่งตัวขึ้นไป ลำดับทั่วไปคือการใช้ is_message_available เพื่อตรวจสอบว่าข้อความมาถึงแล้ว จากนั้นใช้ get_message_and_data ก่อนที่จะใช้ข้อความและตัวเลขที่ส่งคืน

ใช้ send_message บนหุ่นยนต์ตัวอื่นเพื่อส่งข้อความและตัวเลขพร้อมกัน

Usage:
robot.link.get_message_and_data(timeout)

พารามิเตอร์

คำอธิบาย

timeout

ตัวเลือกเสริม ระยะเวลาสูงสุด (มิลลิวินาที) ที่จะรอข้อความก่อนดำเนินการต่อ ค่าเริ่มต้นคือ 1000

ตัวอย่าง

รหัสสำหรับหุ่นยนต์ 1

# Continuously send the current heading to Robot 2
robot.screen.print("Robot 1")

while True:
    robot.link.send_message("heading", robot.inertial.get_heading())
    wait(50, MSEC)

รหัสสำหรับหุ่นยนต์ 2

# Turn to match Robot 1's heading
robot.screen.print("Robot 2")

while True:
    if robot.link.is_message_available():
        message, heading = robot.link.get_message_and_data()
        robot.turn_to(heading)

    wait(50, MSEC)

is_connected#

is_connected จะคืนค่าว่าหุ่นยนต์เชื่อมต่อกับหุ่นยนต์ตัวอื่นหรือไม่ ใช้เมธอดนี้ก่อนส่งหรือรอรับข้อความหากโปรเจ็กต์ต้องการตรวจสอบว่าการเชื่อมต่อระหว่างหุ่นยนต์พร้อมใช้งานแล้ว

  • True — หุ่นยนต์ตัวนี้เชื่อมต่อกับหุ่นยนต์อีกตัวหนึ่ง

  • False — หุ่นยนต์ตัวนี้ไม่ได้เชื่อมต่อกับหุ่นยนต์ตัวอื่น

Usage:
robot.link.is_connected()

พารามิเตอร์

คำอธิบาย

เมธอดนี้ไม่มีพารามิเตอร์

# Display whether the robot is connected
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    robot.screen.print(robot.link.is_connected())
    wait(50, MSEC)

is_message_available#

is_message_available ส่งคืนว่ามีข้อความรออยู่ในคิวข้อความหรือไม่ ใช้วิธีนี้ก่อน get_message หรือ get_message_and_data เพื่อให้หุ่นยนต์ผู้รับพยายามอ่านข้อความหลังจากที่ได้รับข้อความแล้วเท่านั้น

  • True — มีข้อความให้อ่าน

  • False — ไม่มีข้อความใด ๆ ที่สามารถอ่านได้

Usage:
robot.link.is_message_available()

พารามิเตอร์

คำอธิบาย

เมธอดนี้ไม่มีพารามิเตอร์

ตัวอย่าง

รหัสสำหรับหุ่นยนต์ 1

# Press the screen to send a message to Robot 2
robot.screen.print("Robot 1")

while not robot.screen.pressing():
    wait(5, MSEC)

robot.link.send_message("Hello, Robot 2!")

รหัสสำหรับหุ่นยนต์ 2

# Wait until a message is available, then display it
robot.screen.print("Robot 2")
robot.screen.next_row()

while not robot.link.is_message_available():
    wait(5, MSEC)

message = robot.link.get_message()
robot.screen.print(message)

get_name#

get_name ส่งคืนชื่อของหุ่นยนต์ที่เชื่อมต่อ ใช้เมธอดนี้เพื่อแสดงว่าหุ่นยนต์ใดเชื่อมต่ออยู่ก่อนที่จะส่งหรือรับข้อความ หากไม่มีหุ่นยนต์เชื่อมต่อ เมธอดนี้จะส่งคืน None

Usage:
robot.link.get_name()

พารามิเตอร์

คำอธิบาย

เมธอดนี้ไม่มีพารามิเตอร์

# Display the name of the linked robot
robot.screen.print(robot.link.get_name())

การเรียกกลับ#

handle_message#

handle_message ลงทะเบียนฟังก์ชันที่จะทำงานเมื่อหุ่นยนต์ได้รับข้อความเฉพาะ ใช้เมธอดนี้เมื่อหุ่นยนต์ควรตอบสนองโดยอัตโนมัติต่อข้อความที่ทราบแทนที่จะตรวจสอบคิวข้อความในลูป กำหนดฟังก์ชันเรียกกลับก่อน จากนั้นลงทะเบียนด้วย handle_message และข้อความที่ต้องการตรวจสอบ

Usage:
robot.link.handle_message(callback, message)

พารามิเตอร์

คำอธิบาย

callback

ฟังก์ชันที่กำหนดไว้ก่อนหน้านี้ซึ่งจะทำงานเมื่อข้อความที่ได้รับตรงกับข้อความ message

message

ข้อความสำหรับตรวจสอบข้อความที่เข้ามา

ตัวอย่าง

รหัสสำหรับหุ่นยนต์ 1

# Press the screen to send "smile" to Robot 2
robot.screen.print("Robot 1")

while not robot.screen.pressing():
    wait(5, MSEC)

robot.link.send_message("smile")

รหัสสำหรับหุ่นยนต์ 2

# Show a happy emoji when Robot 1 sends "smile"
def robot_smile():
    robot.screen.show_emoji(HAPPY)

robot.link.handle_message(robot_smile, "smile")

while True:
    wait(50, MSEC)

connected#

connected ลงทะเบียนฟังก์ชันที่จะทำงานเมื่อหุ่นยนต์เชื่อมต่อกับหุ่นยนต์ตัวอื่น ใช้วิธีนี้เมื่อโครงการควรตอบสนองทันทีที่การเชื่อมต่อระหว่างหุ่นยนต์เกิดขึ้น กำหนดฟังก์ชันเรียกกลับก่อน จากนั้นลงทะเบียนด้วย connected

Usage:
robot.link.connected(callback, args)

พารามิเตอร์

คำอธิบาย

callback

ฟังก์ชันที่กำหนดไว้ก่อนหน้านี้ ซึ่งจะทำงานเมื่อหุ่นยนต์เชื่อมต่อกับหุ่นยนต์อีกตัวหนึ่ง

args

ตัวเลือกเสริม ทูเปิลที่มีอาร์กิวเมนต์ที่จะส่งไปยังฟังก์ชันเรียกกลับ ดู การใช้ฟังก์ชันที่มีพารามิเตอร์ สำหรับข้อมูลเพิ่มเติม

# Show a happy emoji when connected
def robot_smile():
    robot.screen.show_emoji(HAPPY)

robot.link.connected(robot_smile)

disconnected#

disconnected ลงทะเบียนฟังก์ชันที่จะทำงานเมื่อหุ่นยนต์ไม่ได้เชื่อมต่อกับหุ่นยนต์ตัวอื่นอีกต่อไป ใช้วิธีนี้เมื่อโครงการควรตอบสนองทันทีที่การเชื่อมต่อระหว่างหุ่นยนต์ขาดหายไป กำหนดฟังก์ชันเรียกกลับก่อน จากนั้นลงทะเบียนด้วย disconnected

Usage:
robot.link.disconnected(callback, args)

พารามิเตอร์

คำอธิบาย

callback

ฟังก์ชันที่กำหนดไว้ก่อนหน้านี้ ซึ่งจะทำงานเมื่อหุ่นยนต์ตัวหนึ่งไม่ได้เชื่อมต่อกับหุ่นยนต์ตัวอื่นอีกต่อไป

args

ตัวเลือกเสริม ทูเปิลที่มีอาร์กิวเมนต์ที่จะส่งไปยังฟังก์ชันเรียกกลับ ดู การใช้ฟังก์ชันที่มีพารามิเตอร์ สำหรับข้อมูลเพิ่มเติม

# Show a sad emoji when disconnected
def robot_sad():
    robot.screen.show_emoji(SAD)

robot.link.disconnected(robot_sad)