Viesti#

Johdanto#

Kaksi VEX AIM -koodausrobottia voidaan linkittää toisiinsa, jotta ne voivat kommunikoida projektin aikana. Viestimetodit antavat yhden robotin lähettää viestin toiselle robotille. Viesti voi sisältää pelkkää tekstiä tai tekstiä, jossa on enintään kolme numeroa.

Vastaanotetut viestit tallennetaan FIFO-jonoon (first-in, first-out). Tämä tarkoittaa, että ensimmäisenä vastaanotettu viesti luetaan ensimmäisenä.

Tarkista funktiolla is_message_available viestin lukuvalmius. Lue sitten seuraava tekstiviesti funktiolla get_message. Jos viesti sisältää myös numeroita, lue teksti ja numerot yhdessä funktiolla get_message_and_data.

Huomautus: Jotta viestejä voidaan lähettää ja vastaanottaa, molempien robottien on oltava linkitettyinä ja molempien robottien on oltava käynnissä projekteja, jotka käyttävät Message-metodeja.

Alla on luettelo kaikista menetelmistä:

Toiminto — Lähetä viestejä robottien välillä.

  • send_message — Lähettää tekstiviestin ja enintään kolme numeroa linkitetylle robotille.

Hakejat — Lue viestejä tai tarkista yhteyden tila.

Takaisinkutsutoiminnot — Suorittavat funktioita, kun viestitapahtumia tapahtuu.

  • handle_message — Suorittaa funktion, kun tietty viesti vastaanotetaan.

  • connected — Suorittaa funktion, kun robotti on linkitetty toiseen robottiin.

  • disconnected — Suorittaa funktion, kun robotti ei ole enää yhteydessä toiseen robottiin.

Toiminta#

send_message#

send_message lähettää tekstin ja enintään kolme numeroa linkitetylle robotille. Käytä tätä menetelmää yhdellä robotilla, kun toisen robotin on vastaanotettava komento, signaali tai lyhyt tieto. Lähetä teksti yksinään, kun pelkkä viesti riittää. Lisää numeroita, kun viesti tarvitsee siihen liittyviä arvoja, kuten “heading” robotin nykyisen suunta-arvon lähettäminen.

Tarkista vastaanottavalla robotilla viestin saapuminen käyttämällä is_message_available-funktiota. Käytä sitten get_message-funktiota tekstiviestille tai get_message_and_data-funktiota numeroita sisältävälle viestille.

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

Parametri

Kuvaus

message

Linkitetylle robotille lähetettävä teksti.

arg1

Valinnainen. Viestin mukana lähetettävä numero.

arg2

Valinnainen. Toinen numero, joka lähetetään viestin mukana.

arg3

Valinnainen. Kolmas numero, joka lähetetään viestin mukana.

Esimerkki

Robotin koodi 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")

Robotin 2 koodi

# 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)

Getterit#

get_message#

get_message palauttaa seuraavan vastaanotetun tekstiviestin viestijonosta. Käytä tätä metodia vastaanottavalle robotille, kun linkitetty robotti lähetti vain tekstimuotoisen viestin. Yleinen järjestys on käyttää is_message_available tarkistaaksesi, että viesti on saapunut, ja käyttää sitten get_message ennen palautetun tekstin näyttämistä, vertailua tai käyttöä toisessa metodissa.

Käytä send_message -komentoa toisella robotilla lähettääksesi tekstiviestin.

Usage:
robot.link.get_message(timeout)

Parametri

Kuvaus

timeout

Valinnainen. Viestin odotusaika millisekunteina ennen jatkamista. Oletusarvo on 1000.

Esimerkki

Robotin koodi 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!")

Robotin 2 koodi

# 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 palauttaa seuraavan vastaanotetun tekstiviestin ja viestijonon numerot tuplena. Käytä tätä metodia vastaanottavalle robotille, kun linkitetty robotti lähetti tekstiviestin, jossa oli yksi tai useampi numero. Yleinen järjestys on käyttää is_message_available tarkistaaksesi, että viesti on saapunut, ja sitten käyttää get_message_and_data ennen palautetun tekstin ja numeroiden käyttöä.

Käytä send_message -funktiota toisella robotilla lähettääksesi tekstin ja numerot yhdessä.

Usage:
robot.link.get_message_and_data(timeout)

Parametri

Kuvaus

timeout

Valinnainen. Viestin odotusaika millisekunteina ennen jatkamista. Oletusarvo on 1000.

Esimerkki

Robotin koodi 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)

Robotin 2 koodi

# 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 palauttaa tiedon siitä, onko robotti linkitetty toiseen robottiin. Käytä tätä metodia ennen viestien lähettämistä tai odottamista, jos projektin on tarkistettava, että robottien välinen yhteys on valmis.

  • True — Robotti on linkitetty toiseen robottiin.

  • False — Robotti ei ole linkitetty toiseen robottiin.

Usage:
robot.link.is_connected()

Parametrit

Kuvaus

Tällä menetelmällä ei ole parametreja.

# 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 palauttaa, onko viestijonossa odottamassa viestiä. Käytä tätä metodia ennen get_message tai get_message_and_data -metodia, jotta vastaanottava robotti yrittää lukea viestin vasta sen saapumisen jälkeen.

  • True — Luettavissa on viesti.

  • False — Ei ole luettavia viestejä.

Usage:
robot.link.is_message_available()

Parametrit

Kuvaus

Tällä menetelmällä ei ole parametreja.

Esimerkki

Robotin koodi 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!")

Robotin 2 koodi

# 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 palauttaa linkitetyn robotin nimen. Käytä tätä metodia näyttääksesi, mikä robotti on yhdistettynä, ennen viestien lähettämistä tai vastaanottamista. Jos robottia ei ole linkitetty, metodi palauttaa arvon None.

Usage:
robot.link.get_name()

Parametrit

Kuvaus

Tällä menetelmällä ei ole parametreja.

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

Takaisinkutsut#

handle_message#

handle_message rekisteröi funktion, joka suoritetaan, kun robotti vastaanottaa tietyn tekstiviestin. Käytä tätä metodia, kun robotin tulisi vastata automaattisesti tunnettuun viestiin sen sijaan, että se tarkistaisi viestijonon silmukassa. Määrittele ensin callback-funktio ja rekisteröi se sitten handle_message ja seurattavalla viestitekstillä.

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

Parametri

Kuvaus

callback

Aiemmin määritelty funktio, joka suoritetaan, kun vastaanotettu viesti vastaa arvoa message.

message

Teksti, jota vasten saapuvia viestejä tarkistetaan.

Esimerkki

Robotin koodi 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")

Robotin 2 koodi

# 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 rekisteröi funktion, joka suoritetaan, kun robotti on linkitetty toiseen robottiin. Käytä tätä metodia, kun projektin halutaan vastaavan heti, kun robottien välinen yhteys on muodostettu. Määrittele ensin callback-funktio ja rekisteröi se sitten connected -metodilla.

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

Parametri

Kuvaus

callback

Aiemmin määritelty funktio, joka suoritetaan, kun robotti on linkitetty toiseen robottiin.

args

Valinnainen. Tuple, joka sisältää argumentteja, jotka välitetään takaisinkutsufunktiolle. Lisätietoja on kohdassa Funktioiden käyttö parametrien kanssa.

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

robot.link.connected(robot_smile)

disconnected#

disconnected rekisteröi funktion, joka suoritetaan, kun robotti ei ole enää linkitetty toiseen robottiin. Käytä tätä menetelmää, kun projektin halutaan vastaavan heti, kun robottien välinen yhteys katkeaa. Määrittele ensin takaisinkutsufunktio ja rekisteröi se sitten menetelmällä disconnected.

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

Parametri

Kuvaus

callback

Aiemmin määritelty funktio, joka suoritetaan, kun robotti ei ole enää linkitetty toiseen robottiin.

args

Valinnainen. Tuple, joka sisältää argumentteja, jotka välitetään takaisinkutsufunktiolle. Lisätietoja on kohdassa Funktioiden käyttö parametrien kanssa.

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

robot.link.disconnected(robot_sad)