Tin nhắn#

Giới thiệu#

Hai robot lập trình VEX AIM có thể được liên kết với nhau để giao tiếp trong suốt dự án. Phương thức nhắn tin cho phép một robot gửi tin nhắn đến robot kia. Tin nhắn có thể chỉ bao gồm văn bản hoặc văn bản kèm theo tối đa ba chữ số.

Các tin nhắn nhận được được lưu trữ trong hàng đợi theo nguyên tắc vào trước ra trước (FIFO). Điều này có nghĩa là tin nhắn đầu tiên nhận được sẽ là tin nhắn đầu tiên được đọc.

Sử dụng is_message_available để kiểm tra xem tin nhắn đã sẵn sàng để đọc hay chưa. Sau đó sử dụng get_message để đọc tin nhắn văn bản tiếp theo. Nếu tin nhắn cũng bao gồm các số, hãy sử dụng get_message_and_data để đọc cả văn bản và số cùng nhau.

Lưu ý: Để gửi và nhận tin nhắn, cả hai robot phải được liên kết và cả hai robot phải đang chạy các dự án sử dụng phương thức Message.

Dưới đây là danh sách tất cả các phương pháp:

Hành động — Gửi tin nhắn giữa các robot.

  • send_message — Gửi văn bản và tối đa ba số đến robot được liên kết.

Getters — Đọc tin nhắn hoặc kiểm tra trạng thái kết nối.

  • get_message — Trả về tin nhắn văn bản tiếp theo nhận được.

  • get_message_and_data — Trả về tin nhắn văn bản và số tiếp theo được nhận.

  • is_connected — Trả về liệu robot có được liên kết với robot khác hay không.

  • is_message_available — Trả về liệu tin nhắn có sẵn để đọc hay không.

  • get_name — Trả về tên của robot được liên kết.

Hàm gọi lại — Thực thi các hàm khi sự kiện thông báo xảy ra.

  • handle_message — Chạy một hàm khi nhận được một thông báo cụ thể.

  • connected — Chạy một chức năng khi robot được liên kết với một robot khác.

  • disconnected — Chạy một chức năng khi robot không còn được liên kết với robot khác.

Hoạt động#

send_message#

send_message gửi văn bản và tối đa ba số đến robot được liên kết. Sử dụng phương pháp này trên một robot khi robot kia cần nhận lệnh, tín hiệu hoặc một đoạn thông tin ngắn. Chỉ gửi văn bản khi thông điệp đã đủ. Thêm số khi thông điệp cần các giá trị liên quan, chẳng hạn như gửi “heading” với giá trị hướng hiện tại của robot.

Trên robot nhận, sử dụng is_message_available để kiểm tra xem tin nhắn đã đến chưa. Sau đó sử dụng get_message cho tin nhắn chỉ có văn bản hoặc get_message_and_data cho tin nhắn có chứa số.

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

Tham số

Sự miêu tả

message

Văn bản cần gửi đến robot được liên kết.

arg1

Tùy chọn. Số điện thoại để gửi kèm tin nhắn.

arg2

Tùy chọn. Số điện thoại thứ hai để gửi kèm tin nhắn.

arg3

Tùy chọn. Số điện thoại thứ ba để gửi kèm tin nhắn.

Ví dụ

Mã lệnh cho Robot 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")

Mã lệnh cho Robot 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)

Người nhận#

get_message#

get_message trả về tin nhắn văn bản tiếp theo được nhận từ hàng đợi tin nhắn. Sử dụng phương thức này trên robot nhận khi robot được liên kết gửi tin nhắn chỉ có văn bản. Thứ tự phổ biến là sử dụng is_message_available để kiểm tra xem tin nhắn đã đến chưa, sau đó sử dụng get_message trước khi hiển thị, so sánh hoặc sử dụng văn bản được trả về trong một phương thức khác.

Sử dụng send_message trên robot khác để gửi tin nhắn chỉ có văn bản.

Usage:
robot.link.get_message(timeout)

Tham số

Sự miêu tả

timeout

Tùy chọn. Thời gian tối đa, tính bằng mili giây, để chờ tin nhắn trước khi tiếp tục. Giá trị mặc định là 1000.

Ví dụ

Mã lệnh cho Robot 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!")

Mã lệnh cho Robot 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 trả về tin nhắn văn bản và các số tiếp theo được nhận từ hàng đợi tin nhắn dưới dạng một bộ. Sử dụng phương thức này trên robot nhận khi robot được liên kết đã gửi văn bản có một hoặc nhiều số. Thứ tự phổ biến là sử dụng is_message_available để kiểm tra xem tin nhắn đã đến chưa, sau đó sử dụng get_message_and_data trước khi sử dụng văn bản và các số được trả về.

Sử dụng send_message trên robot khác để gửi văn bản và số cùng nhau.

Usage:
robot.link.get_message_and_data(timeout)

Tham số

Sự miêu tả

timeout

Tùy chọn. Thời gian tối đa, tính bằng mili giây, để chờ tin nhắn trước khi tiếp tục. Giá trị mặc định là 1000.

Ví dụ

Mã lệnh cho 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)

Mã lệnh cho 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)

is_connected#

Phương thức is_connected trả về giá trị cho biết robot có được liên kết với robot khác hay không. Sử dụng phương thức này trước khi gửi hoặc chờ tin nhắn nếu dự án cần kiểm tra xem kết nối giữa các robot đã sẵn sàng hay chưa.

  • True — Robot này được liên kết với một robot khác.

  • False — Robot này không được liên kết với robot khác.

Usage:
robot.link.is_connected()

Thông số

Sự miêu tả

Phương pháp này không có tham số.

# 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 trả về liệu có tin nhắn đang chờ trong hàng đợi tin nhắn hay không. Sử dụng phương thức này trước get_message hoặc get_message_and_data để robot nhận chỉ cố gắng đọc tin nhắn sau khi tin nhắn đã đến.

  • True — Có tin nhắn để đọc.

  • False — Không có tin nhắn nào để đọc.

Usage:
robot.link.is_message_available()

Thông số

Sự miêu tả

Phương pháp này không có tham số.

Ví dụ

Mã lệnh cho Robot 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!")

Mã lệnh cho Robot 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 trả về tên của robot được liên kết. Sử dụng phương thức này để hiển thị robot nào đang được kết nối trước khi gửi hoặc nhận tin nhắn. Nếu không có robot nào được liên kết, phương thức này trả về None.

Usage:
robot.link.get_name()

Thông số

Sự miêu tả

Phương pháp này không có tham số.

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

Cuộc gọi lại#

handle_message#

handle_message đăng ký một hàm chạy khi robot nhận được một tin nhắn văn bản cụ thể. Sử dụng phương pháp này khi robot cần tự động phản hồi một tin nhắn đã biết thay vì kiểm tra hàng đợi tin nhắn trong một vòng lặp. Trước tiên, hãy định nghĩa hàm gọi lại, sau đó đăng ký nó với handle_message và văn bản tin nhắn cần theo dõi.

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

Tham số

Sự miêu tả

callback

Một hàm đã được định nghĩa trước đó sẽ chạy khi thông báo nhận được khớp với thông báo message.

message

Văn bản dùng để đối chiếu với các tin nhắn đến.

Ví dụ

Mã lệnh cho Robot 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")

Mã lệnh cho Robot 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 đăng ký một hàm chạy khi robot được liên kết với một robot khác. Sử dụng phương pháp này khi dự án cần phản hồi ngay khi kết nối giữa các robot được thiết lập. Trước tiên, hãy định nghĩa hàm gọi lại, sau đó đăng ký nó với connected.

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

Tham số

Sự miêu tả

callback

Một hàm đã được định nghĩa trước đó, sẽ chạy khi robot được liên kết với một robot khác.

args

Tùy chọn. Một bộ chứa các đối số để truyền cho hàm gọi lại. Xem Sử dụng hàm có tham số để biết thêm thông tin.

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

robot.link.connected(robot_smile)

disconnected#

disconnected đăng ký một hàm chạy khi robot không còn được liên kết với robot khác. Sử dụng phương pháp này khi dự án cần phản hồi ngay khi kết nối giữa các robot bị mất. Trước tiên, hãy định nghĩa hàm gọi lại, sau đó đăng ký nó với disconnected.

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

Tham số

Sự miêu tả

callback

Một hàm đã được định nghĩa trước đó, sẽ chạy khi robot không còn được liên kết với robot khác.

args

Tùy chọn. Một bộ chứa các đối số để truyền cho hàm gọi lại. Xem Sử dụng hàm có tham số để biết thêm thông tin.

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

robot.link.disconnected(robot_sad)