Zpráva#

Zavedení#

Dva kódovací roboty VEX AIM lze propojit, aby mohli během projektu komunikovat. Metody zpráv umožňují jednomu robotovi poslat zprávu druhému robotovi. Zpráva může obsahovat samostatný text nebo text až se třemi číslicemi.

Přijaté zprávy jsou ukládány do fronty typu „first in, first out“ (FIFO). To znamená, že první přijatá zpráva je první zprávou, která bude přečtena.

Pomocí is_message_available zkontrolujte, zda je zpráva připravena ke čtení. Poté pomocí get_message přečtěte další textovou zprávu. Pokud zpráva obsahuje také čísla, použijte get_message_and_data k přečtení textu a čísel společně.

Poznámka: Aby bylo možné odesílat a přijímat zprávy, musí být oba roboti propojeni a oba roboti musí mít spuštěné projekty, které používají metody Message.

Níže je uveden seznam všech metod:

Akce – Odesílání zpráv mezi roboty.

  • send_message — Odešle text a až tři čísla propojenému robotovi.

Gettery – Čtou zprávy nebo kontrolují stav připojení.

Zpětná volání – Spouštějí funkce, když dojde k událostem zpráv.

  • handle_message — Spustí funkci, když je přijata specifická zpráva.

  • connected — Spustí funkci, když je robot propojen s jiným robotem.

  • disconnected — Spustí funkci, když robot již není propojen s jiným robotem.

Akce#

send_message#

send_message odešle text a až tři čísla propojenému robotovi. Tuto metodu použijte u jednoho robota, když druhý robot potřebuje přijmout příkaz, signál nebo krátkou informaci. Odešlete samostatný text, pokud je zpráva sama o sobě dostatečná. Přidejte čísla, pokud zpráva vyžaduje související hodnoty, například odesláním “heading” s aktuální hodnotou směru robota.

Na přijímacím robotu použijte is_message_available pro ověření, zda zpráva dorazila. Poté použijte get_message pro textovou zprávu nebo get_message_and_data pro zprávu, která obsahuje čísla.

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

Parametr

Popis

message

Text, který se má odeslat propojenému robotovi.

arg1

Volitelné. Číslo, které se má odeslat se zprávou.

arg2

Volitelné. Druhé číslo, které se má odeslat se zprávou.

arg3

Volitelné. Třetí číslo, které se má odeslat se zprávou.

Příklad

Kód pro 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")

Kód pro 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)

Gettery#

get_message#

get_message vrací další přijatou textovou zprávu z fronty zpráv. Tuto metodu použijte na přijímajícím robotu, když propojený robot odeslal pouze textovou zprávu. Běžný postup je použít is_message_available k ověření, zda zpráva dorazila, a poté použít get_message před zobrazením, porovnáním nebo použitím vráceného textu v jiné metodě.

Použijte send_message na druhém robotu k odeslání pouze textové zprávy.

Usage:
robot.link.get_message(timeout)

Parametr

Popis

timeout

Volitelné. Maximální doba čekání na zprávu před pokračováním v milisekundách. Výchozí hodnota je 1000.

Příklad

Kód pro 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!")

Kód pro 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 vrací další přijatou textovou zprávu a čísla z fronty zpráv jako n-tici. Tuto metodu použijte na přijímajícím robotu, když propojený robot odeslal text s jedním nebo více čísly. Běžný postup je použít is_message_available k ověření, zda zpráva dorazila, a poté použít get_message_and_data před použitím vráceného textu a čísel.

Použijte send_message na druhém robotu k odeslání textu a čísel společně.

Usage:
robot.link.get_message_and_data(timeout)

Parametr

Popis

timeout

Volitelné. Maximální doba čekání na zprávu před pokračováním v milisekundách. Výchozí hodnota je 1000.

Příklad

Kód pro 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)

Kód pro 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 vrací, zda je robot propojen s jiným robotem. Tuto metodu použijte před odesláním nebo čekáním na zprávy, pokud projekt potřebuje ověřit, zda je připojení mezi roboty připraveno.

  • True — Robot je propojen s jiným robotem.

  • False — Robot není propojen s jiným robotem.

Usage:
robot.link.is_connected()

Parametry

Popis

Tato metoda nemá žádné parametry.

# 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 vrací, zda ve frontě zpráv čeká zpráva. Tuto metodu použijte před get_message nebo get_message_and_data, aby se přijímací robot pokusil přečíst zprávu až po jejím doručení.

  • True — Je k dispozici zpráva ke čtení.

  • False — Nejsou k dispozici žádné zprávy ke čtení.

Usage:
robot.link.is_message_available()

Parametry

Popis

Tato metoda nemá žádné parametry.

Příklad

Kód pro 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!")

Kód pro 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 vrací název propojeného robota. Tuto metodu použijte k zobrazení, který robot je připojen, před odesláním nebo přijetím zpráv. Pokud není propojen žádný robot, tato metoda vrátí None.

Usage:
robot.link.get_name()

Parametry

Popis

Tato metoda nemá žádné parametry.

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

Zpětná volání#

handle_message#

handle_message registruje funkci, která se spustí, když robot obdrží specifickou textovou zprávu. Tuto metodu použijte, když má robot automaticky reagovat na známou zprávu, místo aby kontroloval frontu zpráv ve smyčce. Nejprve definujte funkci zpětného volání a poté ji zaregistrujte s handle_message a textem zprávy, kterou chcete sledovat.

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

Parametr

Popis

callback

Dříve definovaná funkce, která se spustí, když přijatá zpráva odpovídá message.

message

Text, se kterým se mají kontrolovat příchozí zprávy.

Příklad

Kód pro 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")

Kód pro 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 registruje funkci, která se spustí, když je robot propojen s jiným robotem. Tuto metodu použijte, pokud by projekt měl reagovat, jakmile je navázáno spojení mezi roboty. Nejprve definujte funkci zpětného volání a poté ji zaregistrujte s connected.

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

Parametr

Popis

callback

Předem definovaná funkce, která se spustí, když je robot propojen s jiným robotem.

args

Volitelné. N-tice obsahující argumenty, které se mají předat funkci zpětného volání. Další informace naleznete v části Použití funkcí s parametry.

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

robot.link.connected(robot_smile)

disconnected#

disconnected registruje funkci, která se spustí, když robot již není propojen s jiným robotem. Tuto metodu použijte, když má projekt reagovat, jakmile dojde ke ztrátě spojení mezi roboty. Nejprve definujte funkci zpětného volání a poté ji zaregistrujte s disconnected.

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

Parametr

Popis

callback

Předem definovaná funkce, která se spustí, když robot již není propojen s jiným robotem.

args

Volitelné. N-tice obsahující argumenty, které se mají předat funkci zpětného volání. Další informace naleznete v části Použití funkcí s parametry.

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

robot.link.disconnected(robot_sad)