Bericht#

Invoering#

Twee VEX AIM-codeerrobots kunnen aan elkaar gekoppeld worden zodat ze tijdens een project met elkaar kunnen communiceren. Via berichtmethoden kan de ene robot een bericht naar de andere robot sturen. Een bericht kan alleen tekst bevatten, of tekst met maximaal drie getallen.

Ontvangen berichten worden opgeslagen in een FIFO-wachtrij (first-in, first-out). Dit betekent dat het eerste bericht dat binnenkomt, ook als eerste wordt gelezen.

Gebruik is_message_available om te controleren of een bericht klaar is om te lezen. Gebruik vervolgens get_message om het volgende tekstbericht te lezen. Als het bericht ook getallen bevat, gebruik dan get_message_and_data om de tekst en getallen samen te lezen.

Let op: Om berichten te kunnen verzenden en ontvangen, moeten beide robots gekoppeld zijn en projecten uitvoeren die gebruikmaken van berichtmethoden.

Hieronder vindt u een lijst met alle methoden:

Actie — Berichten versturen tussen robots.

  • send_message — Verstuurt tekst en maximaal drie getallen naar de gekoppelde robot.

Getters — Lees berichten of controleer de verbindingsstatus.

  • get_message — Retourneert het volgende ontvangen tekstbericht.

  • get_message_and_data — Retourneert het volgende ontvangen tekstbericht en de bijbehorende nummers.

  • is_connected — Geeft aan of de robot is verbonden met een andere robot.

  • is_message_available — Geeft aan of een bericht beschikbaar is om te lezen.

  • get_name — Retourneert de naam van de gekoppelde robot.

Callbacks — Voer functies uit wanneer er berichtgebeurtenissen plaatsvinden.

  • handle_message — Voert een functie uit wanneer een specifiek bericht wordt ontvangen.

  • connected — Voert een functie uit wanneer de robot met een andere robot is verbonden.

  • disconnected — Voert een functie uit wanneer de robot niet langer is gekoppeld aan een andere robot.

Actie#

send_message#

send_message verzendt tekst en maximaal drie getallen naar de gekoppelde robot. Gebruik deze methode op één robot wanneer de andere robot een commando, signaal of kort stukje informatie moet ontvangen. Verstuur alleen tekst wanneer het bericht op zichzelf voldoende is. Voeg getallen toe wanneer het bericht gerelateerde waarden nodig heeft, zoals het verzenden van “heading” met de huidige richting van de robot.

Gebruik op de ontvangende robot is_message_available om te controleren of er een bericht is aangekomen. Gebruik vervolgens get_message voor een bericht dat alleen tekst bevat, of get_message_and_data voor een bericht dat getallen bevat.

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

Parameter

Beschrijving

message

De tekst die naar de gekoppelde robot moet worden verzonden.

arg1

Optioneel. Een nummer dat met het bericht wordt meegestuurd.

arg2

Optioneel. Een tweede nummer dat met het bericht wordt meegestuurd.

arg3

Optioneel. Een derde nummer om met het bericht mee te sturen.

Voorbeeld

Code voor 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")

Code voor 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 retourneert het volgende ontvangen tekstbericht uit de berichtenwachtrij. Gebruik deze methode op de ontvangende robot wanneer de gekoppelde robot een bericht heeft verzonden dat alleen uit tekst bestaat. Een gebruikelijke volgorde is om is_message_available te gebruiken om te controleren of er een bericht is aangekomen, en vervolgens get_message te gebruiken voordat de geretourneerde tekst wordt weergegeven, vergeleken of gebruikt in een andere methode.

Gebruik send_message op de andere robot om een ​​bericht te verzenden dat alleen uit tekst bestaat.

Usage:
robot.link.get_message(timeout)

Parameter

Beschrijving

timeout

Optioneel. De maximale tijd, in milliseconden, om te wachten op een bericht voordat verder wordt gegaan. De standaardwaarde is 1000.

Voorbeeld

Code voor 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!")

Code voor 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 retourneert het volgende ontvangen tekstbericht en de getallen uit de berichtenwachtrij als een tuple. Gebruik deze methode op de ontvangende robot wanneer de gekoppelde robot tekst met een of meer getallen heeft verzonden. Een gebruikelijke volgorde is om is_message_available te gebruiken om te controleren of er een bericht is aangekomen, en vervolgens get_message_and_data te gebruiken voordat de geretourneerde tekst en getallen worden gebruikt.

Gebruik send_message op de andere robot om de tekst en getallen samen te verzenden.

Usage:
robot.link.get_message_and_data(timeout)

Parameter

Beschrijving

timeout

Optioneel. De maximale tijd, in milliseconden, om te wachten op een bericht voordat verder wordt gegaan. De standaardwaarde is 1000.

Voorbeeld

Code voor 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)

Code voor 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 retourneert of de robot is verbonden met een andere robot. Gebruik deze methode vóór het verzenden van berichten of het wachten op berichten als het project moet controleren of de robot-naar-robotverbinding gereed is.

  • True — De robot is verbonden met een andere robot.

  • False — De robot is niet gekoppeld aan een andere robot.

Usage:
robot.link.is_connected()

Parameters

Beschrijving

Deze methode heeft geen parameters.

# 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 retourneert of er een bericht in de berichtenwachtrij staat. Gebruik deze methode vóór get_message of get_message_and_data, zodat de ontvangende robot pas probeert een bericht te lezen nadat er een is aangekomen.

  • True — Er is een bericht beschikbaar om te lezen.

  • False — Er zijn geen berichten beschikbaar om te lezen.

Usage:
robot.link.is_message_available()

Parameters

Beschrijving

Deze methode heeft geen parameters.

Voorbeeld

Code voor 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!")

Code voor 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 retourneert de naam van de gekoppelde robot. Gebruik deze methode om te laten zien welke robot is verbonden voordat berichten worden verzonden of ontvangen. Als er geen robot is gekoppeld, retourneert deze methode None.

Usage:
robot.link.get_name()

Parameters

Beschrijving

Deze methode heeft geen parameters.

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

Terugbelverzoeken#

handle_message#

handle_message registreert een functie die wordt uitgevoerd wanneer de robot een specifiek tekstbericht ontvangt. Gebruik deze methode wanneer de robot automatisch moet reageren op een bekend bericht in plaats van de berichtenwachtrij in een lus te controleren. Definieer eerst de callbackfunctie en registreer deze vervolgens met handle_message en de berichttekst waarop moet worden gelet.

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

Parameter

Beschrijving

callback

Een eerder gedefinieerde functie die wordt uitgevoerd wanneer het ontvangen bericht overeenkomt met bericht message.

message

De tekst waarmee inkomende berichten worden gecontroleerd.

Voorbeeld

Code voor 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")

Code voor 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 registreert een functie die wordt uitgevoerd wanneer de robot is gekoppeld aan een andere robot. Gebruik deze methode wanneer het project moet reageren zodra de robot-naar-robotverbinding tot stand is gebracht. Definieer eerst de callbackfunctie en registreer deze vervolgens met connected.

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

Parameter

Beschrijving

callback

Een vooraf gedefinieerde functie die wordt uitgevoerd wanneer de robot is gekoppeld aan een andere robot.

args

Optioneel. Een tuple met argumenten die aan de callbackfunctie moeten worden doorgegeven. Zie Functies gebruiken met parameters voor meer informatie.

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

robot.link.connected(robot_smile)

disconnected#

disconnected registreert een functie die wordt uitgevoerd wanneer de robot niet langer is verbonden met een andere robot. Gebruik deze methode wanneer het project moet reageren zodra de robot-naar-robotverbinding verloren gaat. Definieer eerst de callback-functie en registreer deze vervolgens met disconnected.

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

Parameter

Beschrijving

callback

Een vooraf gedefinieerde functie die wordt uitgevoerd wanneer de robot niet langer is gekoppeld aan een andere robot.

args

Optioneel. Een tuple met argumenten die aan de callbackfunctie moeten worden doorgegeven. Zie Functies gebruiken met parameters voor meer informatie.

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

robot.link.disconnected(robot_sad)