ข้อความ#
การแนะนำ#
หุ่นยนต์เขียนโปรแกรม 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)
พารามิเตอร์ |
คำอธิบาย |
|---|---|
|
ข้อความที่จะส่งไปยังหุ่นยนต์ที่เชื่อมต่ออยู่ |
|
(ไม่บังคับ) หมายเลขโทรศัพท์ที่จะส่งไปพร้อมกับข้อความ |
|
(ไม่บังคับ) หมายเลขโทรศัพท์ที่สองที่จะส่งไปพร้อมกับข้อความ |
|
(ไม่บังคับ) หมายเลขโทรศัพท์ที่สามที่จะส่งไปพร้อมกับข้อความ |
ตัวอย่าง
รหัสสำหรับหุ่นยนต์ 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)
พารามิเตอร์ |
คำอธิบาย |
|---|---|
|
ตัวเลือกเสริม ระยะเวลาสูงสุด (มิลลิวินาที) ที่จะรอข้อความก่อนดำเนินการต่อ ค่าเริ่มต้นคือ |
ตัวอย่าง
รหัสสำหรับหุ่นยนต์ 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)
พารามิเตอร์ |
คำอธิบาย |
|---|---|
|
ตัวเลือกเสริม ระยะเวลาสูงสุด (มิลลิวินาที) ที่จะรอข้อความก่อนดำเนินการต่อ ค่าเริ่มต้นคือ |
ตัวอย่าง
รหัสสำหรับหุ่นยนต์ 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)
พารามิเตอร์ |
คำอธิบาย |
|---|---|
|
ฟังก์ชันที่กำหนดไว้ก่อนหน้านี้ซึ่งจะทำงานเมื่อข้อความที่ได้รับตรงกับข้อความ |
|
ข้อความสำหรับตรวจสอบข้อความที่เข้ามา |
ตัวอย่าง
รหัสสำหรับหุ่นยนต์ 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)
พารามิเตอร์ |
คำอธิบาย |
|---|---|
|
ฟังก์ชันที่กำหนดไว้ก่อนหน้านี้ ซึ่งจะทำงานเมื่อหุ่นยนต์เชื่อมต่อกับหุ่นยนต์อีกตัวหนึ่ง |
|
ตัวเลือกเสริม ทูเปิลที่มีอาร์กิวเมนต์ที่จะส่งไปยังฟังก์ชันเรียกกลับ ดู การใช้ฟังก์ชันที่มีพารามิเตอร์ สำหรับข้อมูลเพิ่มเติม |
# 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)
พารามิเตอร์ |
คำอธิบาย |
|---|---|
|
ฟังก์ชันที่กำหนดไว้ก่อนหน้านี้ ซึ่งจะทำงานเมื่อหุ่นยนต์ตัวหนึ่งไม่ได้เชื่อมต่อกับหุ่นยนต์ตัวอื่นอีกต่อไป |
|
ตัวเลือกเสริม ทูเปิลที่มีอาร์กิวเมนต์ที่จะส่งไปยังฟังก์ชันเรียกกลับ ดู การใช้ฟังก์ชันที่มีพารามิเตอร์ สำหรับข้อมูลเพิ่มเติม |
# Show a sad emoji when disconnected
def robot_sad():
robot.screen.show_emoji(SAD)
robot.link.disconnected(robot_sad)