Nachricht#
Einführung#
Zwei VEX AIM Programmierroboter können miteinander verbunden werden, um während eines Projekts zu kommunizieren. Mithilfe von Nachrichtenmethoden kann ein Roboter dem anderen eine Nachricht senden. Eine Nachricht kann reinen Text oder Text mit bis zu drei Ziffern enthalten.
Empfangene Nachrichten werden in einer FIFO-Warteschlange (First-In, First-Out) gespeichert. Das bedeutet, dass die erste empfangene Nachricht auch als erste gelesen wird.
Verwenden Sie is_message_available, um zu prüfen, ob eine Nachricht zum Lesen bereit ist. Verwenden Sie anschließend get_message, um die nächste Textnachricht zu lesen. Enthält die Nachricht auch Zahlen, verwenden Sie get_message_and_data, um Text und Zahlen zusammen zu lesen.
Hinweis: Damit Nachrichten gesendet und empfangen werden können, müssen beide Roboter miteinander verbunden sein und auf beiden Robotern Projekte laufen, die Message-Methoden verwenden.
Nachfolgend finden Sie eine Liste aller Methoden:
Aktion – Nachrichten zwischen Robotern senden.
send_message— Sendet Text und bis zu drei Zahlen an den verknüpften Roboter.
Getter – Nachrichten lesen oder Verbindungsstatus prüfen.
get_message— Gibt die nächste empfangene Textnachricht zurück.get_message_and_data— Gibt die nächste empfangene Textnachricht und Nummern zurück.is_connected— Gibt zurück, ob der Roboter mit einem anderen Roboter verbunden ist.is_message_available— Gibt zurück, ob eine Nachricht zum Lesen verfügbar ist.get_name— Gibt den Namen des verknüpften Roboters zurück.
Callbacks – Funktionen werden ausgeführt, wenn Nachrichtenereignisse auftreten.
handle_message— Führt eine Funktion aus, wenn eine bestimmte Nachricht empfangen wird.connected— Führt eine Funktion aus, wenn der Roboter mit einem anderen Roboter verbunden ist.disconnected— Führt eine Funktion aus, wenn der Roboter nicht mehr mit einem anderen Roboter verbunden ist.
Aktion#
send_message#
send_message sends text and up to three numbers to the linked robot. Use this method on one robot when the other robot needs to receive a command, signal, or short piece of information. Send text by itself when the message is enough on its own. Add numbers when the message needs related values, such as sending “heading” with the robot’s current heading value.
Auf dem empfangenden Roboter prüfen Sie mit is_message_available, ob eine Nachricht eingegangen ist. Verwenden Sie anschließend get_message für eine reine Textnachricht oder get_message_and_data für eine Nachricht mit Zahlen.
Usage:
robot.link.send_message(message, arg1, arg2, arg3)
Parameter |
Beschreibung |
|---|---|
|
Der Text, der an den verknüpften Roboter gesendet werden soll. |
|
Optional. Eine Telefonnummer, die mit der Nachricht gesendet werden soll. |
|
Optional. Eine zweite Nummer, die mit der Nachricht gesendet werden soll. |
|
Optional. Eine dritte Nummer, die mit der Nachricht gesendet werden soll. |
Beispiel
Code für Roboter 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")
Code für Roboter 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)
Getter#
get_message#
get_message returns the next received text message from the message queue. Use this method on the receiving robot when the linked robot sent a text-only message. A common order is to use is_message_available to check that a message has arrived, then use get_message before displaying, comparing, or using the returned text in another method.
Verwenden Sie send_message auf dem anderen Roboter, um eine reine Textnachricht zu senden.
Usage:
robot.link.get_message(timeout)
Parameter |
Beschreibung |
|---|---|
|
Optional. Die maximale Wartezeit in Millisekunden auf eine Nachricht vor dem Fortfahren. Der Standardwert ist |
Beispiel
Code für Roboter 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!")
Code für Roboter 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 returns the next received text message and numbers from the message queue as a tuple. Use this method on the receiving robot when the linked robot sent text with one or more numbers. A common order is to use is_message_available to check that a message has arrived, then use get_message_and_data before using the returned text and numbers.
Verwenden Sie send_message auf dem anderen Roboter, um den Text und die Zahlen zusammen zu senden.
Usage:
robot.link.get_message_and_data(timeout)
Parameter |
Beschreibung |
|---|---|
|
Optional. Die maximale Wartezeit in Millisekunden auf eine Nachricht vor dem Fortfahren. Der Standardwert ist |
Beispiel
Code für Roboter 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)
Code für Roboter 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#
Die Methode is_connected gibt zurück, ob der Roboter mit einem anderen Roboter verbunden ist (Wert is_connected . Verwenden Sie diese Methode vor dem Senden oder Warten auf Nachrichten, wenn das Projekt prüfen muss, ob die Roboter-zu-Roboter-Verbindung bereit ist.
True— Der Roboter ist mit einem anderen Roboter verbunden.False— Der Roboter ist nicht mit einem anderen Roboter verbunden.
Usage:
robot.link.is_connected()
Parameter |
Beschreibung |
|---|---|
Diese Methode hat keine Parameter. |
# 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 returns whether a message is waiting in the message queue. Use this method before get_message or get_message_and_data so the receiving robot only tries to read a message after one has arrived.
True— Es ist eine Nachricht zum Lesen verfügbar.False— Es sind keine Nachrichten zum Lesen verfügbar.
Usage:
robot.link.is_message_available()
Parameter |
Beschreibung |
|---|---|
Diese Methode hat keine Parameter. |
Beispiel
Code für Roboter 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!")
Code für Roboter 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 returns the name of the linked robot. Use this method to show which robot is connected before sending or receiving messages. If no robot is linked, this method returns None.
Usage:
robot.link.get_name()
Parameter |
Beschreibung |
|---|---|
Diese Methode hat keine Parameter. |
# Display the name of the linked robot
robot.screen.print(robot.link.get_name())
Rückrufe#
handle_message#
handle_message wird eine Funktion registriert, die ausgeführt wird, sobald der Roboter eine bestimmte Textnachricht empfängt. Verwenden Sie diese Methode, wenn der Roboter automatisch auf eine bekannte Nachricht reagieren soll, anstatt die Nachrichtenwarteschlange in einer Schleife zu überprüfen. Definieren Sie zuerst die Callback-Funktion und registrieren Sie sie anschließend mit handle_message sowie dem Nachrichtentext, auf den geachtet werden soll.
Usage:
robot.link.handle_message(callback, message)
Parameter |
Beschreibung |
|---|---|
|
Eine zuvor definierte Funktion, die ausgeführt wird, wenn die empfangene Nachricht mit |
|
Der Text, mit dem eingehende Nachrichten abgeglichen werden sollen. |
Beispiel
Code für Roboter 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")
Code für Roboter 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#
Die Methode connected registriert eine Funktion, die ausgeführt wird, sobald der Roboter mit einem anderen Roboter verbunden ist. Verwenden Sie diese Methode, wenn das Projekt sofort nach der Roboter-zu-Roboter-Verbindung reagieren soll. Definieren Sie zuerst die Callback-Funktion und registrieren Sie sie anschließend mit connected.
Usage:
robot.link.connected(callback, args)
Parameter |
Beschreibung |
|---|---|
|
Eine zuvor definierte Funktion, die ausgeführt wird, wenn der Roboter mit einem anderen Roboter verbunden wird. |
|
Optional. Ein Tupel mit Argumenten, die an die Callback-Funktion übergeben werden sollen. Weitere Informationen finden Sie unter Verwendung von Funktionen mit Parametern. |
# Show a happy emoji when connected
def robot_smile():
robot.screen.show_emoji(HAPPY)
robot.link.connected(robot_smile)
disconnected#
Die Methode disconnected registriert eine Funktion, die ausgeführt wird, wenn die Verbindung zwischen den Robotern unterbrochen wird. Verwenden Sie diese Methode, wenn das Projekt sofort reagieren soll, sobald die Roboter-zu-Roboter-Verbindung abbricht. Definieren Sie zuerst die Callback-Funktion und registrieren Sie sie anschließend mit disconnected.
Usage:
robot.link.disconnected(callback, args)
Parameter |
Beschreibung |
|---|---|
|
Eine zuvor definierte Funktion, die ausgeführt wird, wenn der Roboter nicht mehr mit einem anderen Roboter verbunden ist. |
|
Optional. Ein Tupel mit Argumenten, die an die Callback-Funktion übergeben werden sollen. Weitere Informationen finden Sie unter Verwendung von Funktionen mit Parametern. |
# Show a sad emoji when disconnected
def robot_sad():
robot.screen.show_emoji(SAD)
robot.link.disconnected(robot_sad)