Meddelande#

Introduktion#

Två VEX AIM-kodningsrobotar kan länkas så att de kan kommunicera under ett projekt. Meddelandemetoder låter den ena roboten skicka ett meddelande till den andra roboten. Ett meddelande kan innehålla enbart text eller text med upp till tre siffror.

Mottagna meddelanden lagras i en FIFO-kö (först in, först ut). Det betyder att det första mottagna meddelandet är det första meddelandet som kommer att läsas.

Använd is_message_available för att kontrollera om ett meddelande är klart att läsas. Använd sedan get_message för att läsa nästa textmeddelande. Om meddelandet även innehåller siffror, använd get_message_and_data för att läsa texten och siffrorna tillsammans.

Obs! För att meddelanden ska kunna skickas och tas emot måste båda robotarna vara länkade och båda robotarna måste köra projekt som använder meddelandemetoder.

Nedan följer en lista över alla metoder:

Åtgärd — Skicka meddelanden mellan robotar.

  • send_message — Skickar text och upp till tre siffror till den länkade roboten.

Mottagare — Läs meddelanden eller kontrollera anslutningsstatus.

  • get_message — Returnerar nästa mottagna textmeddelande.

  • get_message_and_data — Returnerar nästa mottagna textmeddelande och siffror.

  • is_connected — Returnerar om roboten är länkad till en annan robot.

  • is_message_available — Returnerar om ett meddelande är tillgängligt för läsning.

  • get_name — Returnerar namnet på den länkade roboten.

Återanrop — Kör funktioner när meddelandehändelser inträffar.

  • handle_message — Kör en funktion när ett specifikt meddelande tas emot.

  • connected — Kör en funktion när roboten är länkad med en annan robot.

  • disconnected — Kör en funktion när roboten inte längre är länkad till en annan robot.

Handling#

send_message#

send_message skickar text och upp till tre siffror till den länkade roboten. Använd den här metoden på en robot när den andra roboten behöver ta emot ett kommando, en signal eller en kort informationstext. Skicka text ensam när meddelandet räcker i sig. Lägg till siffror när meddelandet behöver relaterade värden, till exempel att skicka “heading” med robotens aktuella rubrikvärde.

På den mottagande roboten, använd is_message_available för att kontrollera att ett meddelande har kommit fram. Använd sedan get_message för ett textmeddelande, eller get_message_and_data för ett meddelande som innehåller siffror.

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

Parameter

Beskrivning

message

Texten som ska skickas till den länkade roboten.

arg1

Valfritt. Ett nummer att skicka med meddelandet.

arg2

Valfritt. Ett andra nummer att skicka med meddelandet.

arg3

Valfritt. Ett tredje nummer att skicka med meddelandet.

Exempel

Kod för 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")

Kod för 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 returnerar nästa mottagna textmeddelande från meddelandekön. Använd den här metoden på den mottagande roboten när den länkade roboten skickade ett textmeddelande. En vanlig ordning är att använda is_message_available för att kontrollera att ett meddelande har kommit fram, och sedan använda get_message innan den returnerade texten visas, jämförs eller används i en annan metod.

Använd send_message på den andra roboten för att skicka ett textmeddelande.

Usage:
robot.link.get_message(timeout)

Parameter

Beskrivning

timeout

Valfritt. Den maximala tiden, i millisekunder, att vänta på ett meddelande innan man fortsätter. Standardvärdet är 1000.

Exempel

Kod för 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!")

Kod för 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 returnerar nästa mottagna textmeddelande och siffror från meddelandekön som en tupel. Använd den här metoden på den mottagande roboten när den länkade roboten skickade text med ett eller flera siffror. En vanlig ordning är att använda is_message_available för att kontrollera att ett meddelande har kommit fram, och sedan använda get_message_and_data innan den returnerade texten och siffrorna används.

Använd send_message på den andra roboten för att skicka texten och siffrorna tillsammans.

Usage:
robot.link.get_message_and_data(timeout)

Parameter

Beskrivning

timeout

Valfritt. Den maximala tiden, i millisekunder, att vänta på ett meddelande innan man fortsätter. Standardvärdet är 1000.

Exempel

Kod för 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)

Kod för 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 returnerar om roboten är länkad till en annan robot. Använd den här metoden innan du skickar eller väntar på meddelanden om projektet behöver kontrollera att robot-till-robot-anslutningen är klar.

  • True — Roboten är länkad till en annan robot.

  • False — Roboten är inte länkad till en annan robot.

Usage:
robot.link.is_connected()

Parametrar

Beskrivning

Den här metoden har inga parametrar.

# 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 returnerar om ett meddelande väntar i meddelandekön. Använd den här metoden före get_message eller get_message_and_data så att den mottagande roboten bara försöker läsa ett meddelande efter att ett har anlänt.

  • True — Det finns ett meddelande tillgängligt för läsning.

  • False — Det finns inga meddelanden tillgängliga att läsa.

Usage:
robot.link.is_message_available()

Parametrar

Beskrivning

Den här metoden har inga parametrar.

Exempel

Kod för 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!")

Kod för 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 returnerar namnet på den länkade roboten. Använd den här metoden för att visa vilken robot som är ansluten innan meddelanden skickas eller tas emot. Om ingen robot är länkad returnerar metoden None.

Usage:
robot.link.get_name()

Parametrar

Beskrivning

Den här metoden har inga parametrar.

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

Återuppringningar#

handle_message#

handle_message registrerar en funktion som körs när roboten tar emot ett specifikt textmeddelande. Använd den här metoden när roboten ska svara automatiskt på ett känt meddelande istället för att kontrollera meddelandekön i en loop. Definiera först återuppringningsfunktionen, registrera den sedan med handle_message och meddelandetexten att hålla utkik efter.

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

Parameter

Beskrivning

callback

En tidigare definierad funktion som körs när det mottagna meddelandet matchar message.

message

Texten att kontrollera inkommande meddelanden mot.

Exempel

Kod för 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")

Kod för 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 registrerar en funktion som körs när roboten är länkad med en annan robot. Använd den här metoden när projektet ska svara så snart robot-till-robot-anslutningen upprättas. Definiera först återuppringningsfunktionen och registrera den sedan med connected.

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

Parameter

Beskrivning

callback

En tidigare definierad funktion som körs när roboten är länkad med en annan robot.

args

Valfritt. En tupel som innehåller argument som ska skickas till callback-funktionen. Se Använda funktioner med parametrar för mer information.

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

robot.link.connected(robot_smile)

disconnected#

disconnected registrerar en funktion som körs när roboten inte längre är länkad till en annan robot. Använd den här metoden när projektet ska svara så snart robot-till-robot-anslutningen bryts. Definiera först återanropsfunktionen och registrera den sedan med disconnected.

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

Parameter

Beskrivning

callback

En tidigare definierad funktion som körs när roboten inte längre är länkad till en annan robot.

args

Valfritt. En tupel som innehåller argument som ska skickas till callback-funktionen. Se Använda funktioner med parametrar för mer information.

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

robot.link.disconnected(robot_sad)