Wiadomość#

Wstęp#

Dwa roboty VEX AIM Coding Robots można połączyć, aby umożliwić im komunikację w trakcie projektu. Metody przesyłania wiadomości pozwalają jednemu robotowi wysyłać wiadomość do drugiego. Wiadomość może zawierać tekst lub tekst z maksymalnie trzema cyframi.

Otrzymane wiadomości są przechowywane w kolejce FIFO (pierwszy wszedł, pierwszy wyszedł). Oznacza to, że pierwsza otrzymana wiadomość jest pierwszą, która zostanie odczytana.

Użyj is_message_available, aby sprawdzić, czy wiadomość jest gotowa do odczytania. Następnie użyj get_message, aby odczytać kolejną wiadomość tekstową. Jeśli wiadomość zawiera również cyfry, użyj get_message_and_data, aby odczytać tekst i cyfry jednocześnie.

Uwaga: Aby wiadomości mogły być wysyłane i odbierane, oba roboty muszą być połączone i oba muszą uruchamiać projekty wykorzystujące metody Message.

Poniżej znajduje się lista wszystkich metod:

Działanie — wysyłanie wiadomości między robotami.

  • send_message — Wysyła tekst i maksymalnie trzy numery do połączonego robota.

Gettery — odczytują wiadomości lub sprawdzają stan połączenia.

  • get_message — Zwraca kolejną otrzymaną wiadomość tekstową.

  • get_message_and_data — Zwraca kolejną otrzymaną wiadomość tekstową i numery.

  • is_connected — Zwraca informację, czy robot jest połączony z innym robotem.

  • is_message_available — Zwraca informację, czy wiadomość jest dostępna do odczytu.

  • get_name — Zwraca nazwę powiązanego robota.

Wywołania zwrotne — uruchamiają funkcje, gdy wystąpią zdarzenia związane z wiadomościami.

  • handle_message — Uruchamia funkcję po otrzymaniu określonej wiadomości.

  • connected — Uruchamia funkcję, gdy robot jest połączony z innym robotem.

  • disconnected — Uruchamia funkcję, gdy robot nie jest już połączony z innym robotem.

Działanie#

send_message#

send_message wysyła tekst i maksymalnie trzy liczby do połączonego robota. Użyj tej metody na jednym robocie, gdy drugi robot potrzebuje odebrać polecenie, sygnał lub krótką informację. Wyślij sam tekst, gdy sama wiadomość jest wystarczająca. Dodaj liczby, gdy wiadomość wymaga powiązanych wartości, na przykład wysyłając “heading” z bieżącą wartością nagłówka robota.

Na robocie odbierającym użyj is_message_available, aby sprawdzić, czy wiadomość dotarła. Następnie użyj get_message, aby otrzymać wiadomość wyłącznie tekstową, lub get_message_and_data, aby otrzymać wiadomość zawierającą liczby.

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

Parametr

Opis

message

Tekst, który należy wysłać do powiązanego robota.

arg1

Opcjonalnie. Numer, który należy wysłać w wiadomości.

arg2

Opcjonalnie. Drugi numer, który należy wysłać wraz z wiadomością.

arg3

Opcjonalnie. Trzeci numer do wysłania w wiadomości.

Przykład

Kod dla Robota 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")

Kod dla Robota 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)

Getters#

get_message#

get_message zwraca kolejną otrzymaną wiadomość tekstową z kolejki wiadomości. Użyj tej metody na robocie odbierającym, gdy powiązany robot wysłał wiadomość tekstową. Typowa kolejność to użycie is_message_available w celu sprawdzenia, czy wiadomość dotarła, a następnie użycie get_message przed wyświetleniem, porównaniem lub użyciem zwróconego tekstu w innej metodzie.

Użyj send_message na drugim robocie, aby wysłać wiadomość zawierającą wyłącznie tekst.

Usage:
robot.link.get_message(timeout)

Parametr

Opis

timeout

Opcjonalnie. Maksymalny czas oczekiwania na komunikat (w milisekundach) przed kontynuowaniem. Wartość domyślna to 1000.

Przykład

Kod dla Robota 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!")

Kod dla Robota 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 zwraca kolejną otrzymaną wiadomość tekstową i liczby z kolejki wiadomości jako krotkę. Użyj tej metody na robocie odbierającym, gdy powiązany robot wysłał tekst z jedną lub kilkoma liczbami. Typowa kolejność to użycie is_message_available w celu sprawdzenia, czy wiadomość dotarła, a następnie użycie get_message_and_data przed użyciem zwróconego tekstu i liczb.

Użyj send_message na drugim robocie, aby wysłać tekst i liczby razem.

Usage:
robot.link.get_message_and_data(timeout)

Parametr

Opis

timeout

Opcjonalnie. Maksymalny czas oczekiwania na komunikat (w milisekundach) przed kontynuowaniem. Wartość domyślna to 1000.

Przykład

Kod dla Robota 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)

Kod dla Robota 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 zwraca informację, czy robot jest połączony z innym robotem. Użyj tej metody przed wysłaniem wiadomości lub oczekiwaniem na nie, jeśli projekt musi sprawdzić, czy połączenie między robotami jest gotowe.

  • True — Robot jest połączony z innym robotem.

  • False — Robot nie jest połączony z innym robotem.

Usage:
robot.link.is_connected()

Parametry

Opis

Ta metoda nie ma żadnych parametrów.

# 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 zwraca informację, czy wiadomość oczekuje w kolejce wiadomości. Użyj tej metody przed get_message lub get_message_and_data, aby robot odbierający spróbował odczytać wiadomość dopiero po jej otrzymaniu.

  • True — Wiadomość jest dostępna do odczytania.

  • False — Brak dostępnych wiadomości do odczytania.

Usage:
robot.link.is_message_available()

Parametry

Opis

Ta metoda nie ma żadnych parametrów.

Przykład

Kod dla Robota 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!")

Kod dla Robota 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 zwraca nazwę połączonego robota. Użyj tej metody, aby wyświetlić, który robot jest połączony przed wysłaniem lub odebraniem wiadomości. Jeśli żaden robot nie jest połączony, ta metoda zwraca None.

Usage:
robot.link.get_name()

Parametry

Opis

Ta metoda nie ma żadnych parametrów.

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

Wywołania zwrotne#

handle_message#

handle_message rejestruje funkcję uruchamianą po otrzymaniu przez robota określonej wiadomości tekstowej. Użyj tej metody, gdy robot powinien automatycznie odpowiedzieć na znaną wiadomość zamiast sprawdzać kolejkę wiadomości w pętli. Najpierw zdefiniuj funkcję wywołania zwrotnego, a następnie zarejestruj ją za pomocą handle_message i tekstu wiadomości, na który należy zwrócić uwagę.

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

Parametr

Opis

callback

Wcześniej zdefiniowana funkcja uruchamiana, gdy otrzymana wiadomość pasuje message.

message

Tekst, według którego należy sprawdzać przychodzące wiadomości.

Przykład

Kod dla Robota 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")

Kod dla Robota 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 rejestruje funkcję, która uruchamia się, gdy robot jest połączony z innym robotem. Użyj tej metody, gdy projekt powinien reagować natychmiast po nawiązaniu połączenia między robotami. Najpierw zdefiniuj funkcję wywołania zwrotnego, a następnie zarejestruj ją za pomocą connected.

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

Parametr

Opis

callback

Wcześniej zdefiniowana funkcja, która uruchamia się, gdy robot jest połączony z innym robotem.

args

Opcjonalnie. Krotka zawierająca argumenty do przekazania do funkcji wywołania zwrotnego. Więcej informacji można znaleźć w Używanie funkcji z parametrami.

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

robot.link.connected(robot_smile)

disconnected#

disconnected rejestruje funkcję, która uruchamia się, gdy robot nie jest już połączony z innym robotem. Użyj tej metody, gdy projekt powinien zareagować natychmiast po utracie połączenia między robotami. Najpierw zdefiniuj funkcję wywołania zwrotnego, a następnie zarejestruj ją za pomocą disconnected.

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

Parametr

Opis

callback

Wcześniej zdefiniowana funkcja, która uruchamia się, gdy robot nie jest już połączony z innym robotem.

args

Opcjonalnie. Krotka zawierająca argumenty do przekazania do funkcji wywołania zwrotnego. Więcej informacji można znaleźć w Używanie funkcji z parametrami.

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

robot.link.disconnected(robot_sad)