Mensaje#
Introducción#
Se pueden vincular dos robots de codificación VEX AIM para que puedan comunicarse durante un proyecto. Los métodos de mensajes permiten que un robot envíe un mensaje al otro robot. Un mensaje puede incluir texto solo o texto con hasta tres números.
Los mensajes recibidos se almacenan en una cola de primero en entrar, primero en salir (FIFO). Esto significa que el primer mensaje recibido es el primer mensaje que se leerá.
Usa is_message_available para verificar si un mensaje está listo para leer. Luego usa get_message para leer el siguiente mensaje de texto. Si el mensaje también incluye números, usa get_message_and_data para leer el texto y los números juntos.
Nota: Para que los mensajes se envíen y reciban, ambos robots deben estar vinculados y ambos robots deben estar ejecutando proyectos que utilicen métodos de Mensaje.
A continuación se muestra una lista de todos los métodos:
Acción: envía mensajes entre robots.
send_message— Envía texto y hasta tres números al robot vinculado.
Getters: lee los mensajes o comprueba el estado de la conexión.
get_message— Devuelve el siguiente mensaje de texto recibido.get_message_and_data— Devuelve los siguientes mensajes de texto y números recibidos.is_connected— Devuelve si el robot está vinculado con otro robot.is_message_available— Devuelve si un mensaje está disponible para leer.get_name— Devuelve el nombre del robot vinculado.
Devoluciones de llamada: ejecuta funciones cuando ocurren eventos de mensajes.
handle_message— Ejecuta una función cuando se recibe un mensaje específico.connected— Ejecuta una función cuando el robot está vinculado con otro robot.disconnected: ejecuta una función cuando el robot ya no está vinculado con otro robot.
Acción#
send_message#
send_message envía texto y hasta tres números al robot vinculado. Utilice este método en un robot cuando el otro robot necesite recibir un comando, señal o información breve. Envíe texto por sí mismo cuando el mensaje sea suficiente por sí solo. Agregue números cuando el mensaje necesite valores relacionados, como enviar “heading” con el valor de encabezado actual del robot.
En el robot receptor, use is_message_available para verificar que haya llegado un mensaje. Luego usa get_message para un mensaje de solo texto, o get_message_and_data para un mensaje que incluya números.
Usage:
robot.link.send_message(message, arg1, arg2, arg3)
Parámetro |
Descripción |
|---|---|
|
El texto a enviar al robot vinculado. |
|
Opcional. Un número para enviar con el mensaje. |
|
Opcional. Un segundo número para enviar con el mensaje. |
|
Opcional. Un tercer número para enviar con el mensaje. |
Ejemplo
Código para Robot 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")
Código para Robot 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 devuelve el siguiente mensaje de texto recibido de la cola de mensajes. Utilice este método en el robot receptor cuando el robot vinculado envíe un mensaje de solo texto. Un orden común es usar is_message_available para verificar que un mensaje ha llegado, luego usar get_message antes de mostrar, comparar o usar el texto devuelto en otro método.
Utiliza send_message en el otro robot para enviar un mensaje de texto.
Usage:
robot.link.get_message(timeout)
Parámetro |
Descripción |
|---|---|
|
Opcional. El tiempo máximo, en milisegundos, para esperar un mensaje antes de continuar. El valor predeterminado es |
Ejemplo
Código para Robot 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!")
Código para Robot 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 devuelve el siguiente mensaje de texto recibido y los números de la cola de mensajes como una tupla. Utilice este método en el robot receptor cuando el robot vinculado envíe un mensaje de texto con uno o más números. Un orden común es usar is_message_available para verificar que un mensaje haya llegado, luego usar get_message_and_data antes de usar el texto y los números devueltos.
Usa send_message en el otro robot para enviar el texto y los números juntos.
Usage:
robot.link.get_message_and_data(timeout)
Parámetro |
Descripción |
|---|---|
|
Opcional. El tiempo máximo, en milisegundos, para esperar un mensaje antes de continuar. El valor predeterminado es |
Ejemplo
Código para 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)
Código para 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)
is_connected#
is_connected devuelve si el robot está vinculado con otro robot. Utilice este método antes de enviar o esperar mensajes si el proyecto necesita verificar que la conexión robot a robot esté lista.
True: el robot está vinculado con otro robot.False— El robot no está vinculado con otro robot.
Usage:
robot.link.is_connected()
Parámetros |
Descripción |
|---|---|
Este método no tiene parámetros. |
# 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 devuelve si un mensaje está esperando en la cola de mensajes. Utilice este método antes de get_message o get_message_and_data para que el robot receptor solo intente leer un mensaje después de que haya llegado.
True: hay un mensaje disponible para leer.False— No hay mensajes disponibles para ser leídos.
Usage:
robot.link.is_message_available()
Parámetros |
Descripción |
|---|---|
Este método no tiene parámetros. |
Ejemplo
Código para Robot 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!")
Código para Robot 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 devuelve el nombre del robot vinculado. Utilice este método para mostrar qué robot está conectado antes de enviar o recibir mensajes. Si no hay ningún robot vinculado, este método devuelve None.
Usage:
robot.link.get_name()
Parámetros |
Descripción |
|---|---|
Este método no tiene parámetros. |
# Display the name of the linked robot
robot.screen.print(robot.link.get_name())
Devoluciones de llamada#
handle_message#
handle_message registra una función que se ejecuta cuando el robot recibe un mensaje de texto específico. Utilice este método cuando el robot deba responder automáticamente a un mensaje conocido en lugar de verificar la cola de mensajes en un bucle. Defina primero la función de devolución de llamada y luego regístrela con handle_message y el texto del mensaje a tener en cuenta.
Usage:
robot.link.handle_message(callback, message)
Parámetro |
Descripción |
|---|---|
|
Una función previamente definida que se ejecuta cuando el mensaje recibido coincide con el |
|
El texto para verificar los mensajes entrantes. |
Ejemplo
Código para Robot 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")
Código para Robot 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 registra una función que se ejecuta cuando el robot está vinculado con otro robot. Utilice este método cuando el proyecto deba responder tan pronto como se realice la conexión de robot a robot. Defina primero la función de devolución de llamada y luego regístrela con connected.
Usage:
robot.link.connected(callback, args)
Parámetro |
Descripción |
|---|---|
|
Una función previamente definida que se ejecuta cuando el robot está vinculado con otro robot. |
|
Opcional. Una tupla que contiene argumentos para pasar a la función de devolución de llamada. Consulte Uso de funciones con parámetros para obtener más información. |
# Show a happy emoji when connected
def robot_smile():
robot.screen.show_emoji(HAPPY)
robot.link.connected(robot_smile)
disconnected#
disconnected registra una función que se ejecuta cuando el robot ya no está vinculado con otro robot. Utilice este método cuando el proyecto deba responder tan pronto como se pierda la conexión de robot a robot. Defina primero la función de devolución de llamada y luego regístrela con disconnected.
Usage:
robot.link.disconnected(callback, args)
Parámetro |
Descripción |
|---|---|
|
Una función previamente definida que se ejecuta cuando el robot ya no está vinculado con otro robot. |
|
Opcional. Una tupla que contiene argumentos para pasar a la función de devolución de llamada. Consulte Uso de funciones con parámetros para obtener más información. |
# Show a sad emoji when disconnected
def robot_sad():
robot.screen.show_emoji(SAD)
robot.link.disconnected(robot_sad)