Üzenet#

Bevezetés#

Két VEX AIM kódolórobot összekapcsolható, így kommunikálhatnak egymással egy projekt során. Az üzenetküldési metódusok lehetővé teszik, hogy az egyik robot üzenetet küldjön a másiknak. Egy üzenet tartalmazhat önmagában szöveget, vagy legfeljebb három számot tartalmazó szöveget.

A fogadott üzeneteket FIFO (first-in, first-out) sorban tárolja a rendszer. Ez azt jelenti, hogy az elsőként fogadott üzenet lesz az első, amelyet beolvas.

A is_message_available függvénnyel ellenőrizheted, hogy az üzenet olvasható-e. Ezután a get_message függvénnyel olvashatod be a következő szöveges üzenetet. Ha az üzenet számokat is tartalmaz, a get_message_and_data függvénnyel együtt olvashatod be a szöveget és a számokat.

Megjegyzés: Az üzenetek küldéséhez és fogadásához mindkét robotnak össze kell kapcsolódnia, és mindkét robotnak olyan projekteket kell futtatnia, amelyek Message metódusokat használnak.

Az alábbiakban felsoroljuk az összes módszert:

Akció — Üzenetek küldése robotok között.

  • send_message — Szöveges üzenetet és legfeljebb három számot küld a csatolt robotnak.

Getterek – Üzenetek olvasása vagy kapcsolat állapotának ellenőrzése.

  • get_message — Visszaadja a következő fogadott szöveges üzenetet.

  • get_message_and_data — Visszaadja a következő fogadott szöveges üzenetet és számokat.

  • is_connected — Visszaadja, hogy a robot össze van-e kapcsolva egy másik robottal.

  • is_message_available — Visszaadja, hogy egy üzenet olvasható-e.

  • get_name — Visszaadja a csatolt robot nevét.

Visszahívások – Függvények futtatása üzenetesemények bekövetkeztekor.

  • handle_message — Lefuttat egy függvényt, amikor egy adott üzenetet fogad.

  • connected — Függvényt futtat, amikor a robot egy másik robothoz van csatlakoztatva.

  • disconnected — Lefuttat egy függvényt, amikor a robot már nincs másik robothoz csatlakoztatva.

Akció#

send_message#

send_message szöveget és legfeljebb három számot küld a csatolt robotnak. Ezt a módszert az egyik roboton akkor használd, ha a másik robotnak parancsot, jelet vagy rövid információt kell fogadnia. Küldj csak szöveget, ha az üzenet önmagában elég. Adj hozzá számokat, ha az üzenethez kapcsolódó értékekre van szükség, például “heading” küldése a robot aktuális irányértékével.

A fogadó roboton a is_message_available paranccsal ellenőrizd, hogy megérkezett-e az üzenet. Ezután használd a get_message paranccsal csak szöveges üzenetet, vagy a get_message_and_data paranccsal számokat tartalmazó üzenetet.

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

Paraméter

Leírás

message

A csatolt robotnak küldendő szöveg.

arg1

Opcionális. Egy szám, amelyet az üzenettel együtt kell elküldeni.

arg2

Opcionális. Egy második szám, amelyet az üzenettel együtt kell elküldeni.

arg3

Opcionális. Egy harmadik szám, amelyet az üzenettel együtt kell elküldeni.

Példa

Robot kódja 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")

Robot kódja 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)

Getterek#

get_message#

get_message metódus visszaadja a következő fogadott szöveges üzenetet az üzenetsorból. Ezt a metódust a fogadó roboton kell használni, ha a csatolt robot csak szöveges üzenetet küldött. Gyakori sorrend a is_message_available metódus használata annak ellenőrzésére, hogy megérkezett-e az üzenet, majd get_message metódus használata a visszaadott szöveg megjelenítése, összehasonlítása vagy egy másik metódusban való felhasználása előtt.

Használd a send_message parancsot a másik roboton egy szöveges üzenet küldéséhez.

Usage:
robot.link.get_message(timeout)

Paraméter

Leírás

timeout

Opcionális. A maximális várakozási idő milliszekundumban, ameddig a program vár egy üzenetre a folytatás előtt. Az alapértelmezett érték 1000.

Példa

Robot kódja 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!")

Robot kódja 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 függvény visszaadja a következő fogadott szöveges üzenetet és az üzenetsorból származó számokat egy tuple-ként. Ezt a metódust a fogadó roboton kell használni, amikor a csatolt robot egy vagy több számot tartalmazó szöveget küldött. Gyakori sorrend a is_message_available használata az üzenet megérkezésének ellenőrzésére, majd get_message_and_data metódus használata a visszaadott szöveg és számok felhasználása előtt.

Használd a send_message parancsot a másik roboton a szöveg és a számok együttes elküldéséhez.

Usage:
robot.link.get_message_and_data(timeout)

Paraméter

Leírás

timeout

Opcionális. A maximális várakozási idő milliszekundumban, ameddig a program vár egy üzenetre a folytatás előtt. Az alapértelmezett érték 1000.

Példa

Robot kódja 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 kódja 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 Visszaadja, hogy a robot össze van-e kapcsolva egy másik robottal. Ezt a metódust az üzenetek küldése vagy megvárása előtt kell használni, ha a projektnek ellenőriznie kell, hogy a robotok közötti kapcsolat készen áll-e.

  • True — A robot egy másik robothoz van csatlakoztatva.

  • False — A robot nincs összekapcsolva egy másik robottal.

Usage:
robot.link.is_connected()

Paraméterek

Leírás

Ennek a metódusnak nincsenek paraméterei.

# 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 Visszaadja, hogy várakozik-e üzenet az üzenetsorban. Ezt a metódust a get_message vagy az get_message_and_data metódus előtt kell használni, hogy a fogadó robot csak a már megérkezett üzenet után próbálja meg elolvasni azt.

  • True — Van egy elolvasásra váró üzenet.

  • False — Nincsenek olvasható üzenetek.

Usage:
robot.link.is_message_available()

Paraméterek

Leírás

Ennek a metódusnak nincsenek paraméterei.

Példa

Robot kódja 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!")

Robot kódja 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 visszaadja a csatolt robot nevét. Ezzel a metódussal megjelenítheti, hogy melyik robot van csatlakoztatva az üzenetek küldése vagy fogadása előtt. Ha nincs csatolt robot, akkor a metódus None értéket ad vissza.

Usage:
robot.link.get_name()

Paraméterek

Leírás

Ennek a metódusnak nincsenek paraméterei.

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

Visszahívások#

handle_message#

handle_message regisztrál egy függvényt, amely akkor fut le, amikor a robot egy adott szöveges üzenetet kap. Ezt a metódust akkor használd, ha a robotnak automatikusan kell válaszolnia egy ismert üzenetre, ahelyett, hogy egy ciklusban ellenőrizné az üzenetsort. Először definiáld a visszahívó függvényt, majd regisztráld handle_message paraméterrel és a figyelendő üzenet szövegével.

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

Paraméter

Leírás

callback

Egy korábban definiált függvény, amely akkor fut le, amikor a fogadott üzenet egyezik message értékkel.

message

A bejövő üzenetek ellenőrzéséhez szükséges szöveg.

Példa

Robot kódja 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")

Robot kódja 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 egy olyan függvényt regisztrál, amely akkor fut, amikor a robot egy másik robothoz van csatlakoztatva. Ezt a metódust akkor használjuk, ha a projektnek a robotok közötti kapcsolat létrejötte után azonnal válaszolnia kell. Először definiáljuk a visszahívó függvényt, majd regisztráljuk a connected metódussal.

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

Paraméter

Leírás

callback

Egy korábban definiált függvény, amely akkor fut le, amikor a robot egy másik robothoz van csatlakoztatva.

args

Opcionális. Egy tuple, amely argumentumokat tartalmaz a visszahívó függvénynek átadandó. További információkért lásd a Függvények használata paraméterekkel részt.

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

robot.link.connected(robot_smile)

disconnected#

disconnected Egy olyan függvényt regisztrál, amely akkor fut le, amikor a robot már nincs másik robothoz csatlakoztatva. Ezt a metódust akkor használd, ha a projektnek azonnal válaszolnia kell, amint megszakad a robotok közötti kapcsolat. Először definiáld a visszahívó függvényt, majd regisztráld disconnected metódussal.

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

Paraméter

Leírás

callback

Egy korábban definiált függvény, amely akkor fut le, amikor a robot már nincs másik robothoz csatlakoztatva.

args

Opcionális. Egy tuple, amely argumentumokat tartalmaz a visszahívó függvénynek átadandó. További információkért lásd a Függvények használata paraméterekkel részt.

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

robot.link.disconnected(robot_sad)