Ü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 |
|---|---|
|
A csatolt robotnak küldendő szöveg. |
|
Opcionális. Egy szám, amelyet az üzenettel együtt kell elküldeni. |
|
Opcionális. Egy második szám, amelyet az üzenettel együtt kell elküldeni. |
|
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 |
|---|---|
|
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 |
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 |
|---|---|
|
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 |
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 |
|---|---|
|
Egy korábban definiált függvény, amely akkor fut le, amikor a fogadott üzenet egyezik |
|
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 |
|---|---|
|
Egy korábban definiált függvény, amely akkor fut le, amikor a robot egy másik robothoz van csatlakoztatva. |
|
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 |
|---|---|
|
Egy korábban definiált függvény, amely akkor fut le, amikor a robot már nincs másik robothoz csatlakoztatva. |
|
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)