Повідомлення#

Вступ#

Два роботи-програматори VEX AIM можна з’єднати для спілкування під час проєкту. Методи повідомлень дозволяють одному роботу надсилати повідомлення іншому. Повідомлення може містити текст окремо або текст, що містить до трьох цифр.

Отримані повідомлення зберігаються в черзі FIFO (перший прийшов, перший вийшов). Це означає, що перше отримане повідомлення буде прочитано першим.

Використайте is_message_available, щоб перевірити, чи готове повідомлення до читання. Потім використовуйте get_message, щоб прочитати наступне текстове повідомлення. Якщо повідомлення також містить числа, використовуйте get_message_and_data, щоб прочитати текст і числа разом.

Примітка: Щоб повідомлення можна було надсилати та отримувати, обидва роботи мають бути пов’язані, і обидва роботи повинні запускати проекти, що використовують методи Message.

Нижче наведено список усіх методів:

Дія — Надсилання повідомлень між роботами.

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