• VEXcode Robotics Logo VEX Robotics Logo
  • VEX API Home Button VEX API Home Button
  • VEX 123 logo in purple VEX 123 logo in white
  • VEX GO logo in lime green VEX GO logo in white
  • VEXcode AIM logo in blue VEXcode AIM logo in white
  • VEX IQ logo in blue VEX IQ logo in white
  • VEX EXP logo in red VEX EXP logo in white
  • VEX V5 logo in red VEX V5 logo in white
  • VEX CTE logo in green VEX CTE logo in white
  • VEX AIR logo in orange VEX AIR logo in white
  • VEXcode VR logo in gold VEXcode VR logo in white
Siirry pääsisältöön
Ctrl+K

< Back to Platform Select

  • VEX V5
  • VEX V5 API-viite
  • VEXlink
  • Viestilinkki
Suomi
  • English
  • العربية
  • বাংলা
  • Česky
  • Deutsch
  • Ελληνικά
  • Español
  • Español Latinoamericano
  • Français
  • Gaeilge
  • हिंदी
  • Magyar
  • Bahasa Indonesia
  • 日本語
  • 한국어
  • Lietuvių
  • Latviešu
  • മലയാളം
  • Nederlands
  • Polski
  • Português
  • Русский
  • Svenska
  • ไทย
  • Türkçe
  • Українська
  • Tiếng Việt
  • 简体中文
  • 繁體中文
  • VEXcode Robotics Logo

Osioiden navigointi

  • Lohkot
  • Python
  • C++
    • Voimansiirto
    • Moottorit ja moottorinohjaimet
    • Ohjain
    • Aivot
    • Kilpailu
    • Älykkäät porttilaitteet
    • 3-johtimiset laitteet
    • Konsoli
    • Logiikka
    • VEXlink
      • Viestilinkki
      • Sarjalinkki
    • CTE-työryhmä
  • VEXcode-oppaat

Alustan navigointi

  • VEX 123 logo in purple VEX 123 logo in white
  • VEX GO logo in lime green VEX GO logo in white
  • VEXcode AIM logo in blue VEXcode AIM logo in white
  • VEX IQ logo in blue VEX IQ logo in white
  • VEX EXP logo in red VEX EXP logo in white
  • VEX V5 logo in red VEX V5 logo in white
  • VEX CTE logo in green VEX CTE logo in white
  • VEX AIR logo in orange VEX AIR logo in white
  • VEXcode VR logo in gold VEXcode VR logo in white

Viestilinkki#

  • Johdanto

  • Luokanrakentajat

  • Luokan tuhoaja

  • Parametrit

  • Esimerkki

  • Jäsenten toiminnot

    • onLinkitetty

    • lähetä

    • vastaanottaa

    • vastaanotettu

Johdanto#

message_link -luokka antaa kahden V5 Brainin kommunikoida lähettämällä lyhyitä merkkijonoviestejä, jotka sisältävät valinnaisesti pientä dataa. Se on suunniteltu robottien väliseen koordinointiin – kuten rutiinien käynnistämiseen, anturitulosten jakamiseen tai toisen robotin toiminnan käynnistämiseen.

Jokainen send -funktion käyttökerta lisää viestin linkitetyn V5 Brainin jonoon, ja jono luetaan FIFO-periaatteella (first-in, first-out). Jos useita viestejä lähetetään ennen kuin toinen V5 Brain käyttää receive -funktiota, ne tallennetaan ja palautetaan yksi kerrallaan lähetysjärjestyksessä. Koska viestit voivat jonottaa, saman tilan toistuva lähettäminen jokaisessa silmukassa voi luoda ruuhkan; aikakriittisissä logiikoissa viesti lähetetään vain, kun arvot muuttuvat.

Tärkeää: Molempien robottien on oltava käynnissä projekteissa, jotka käyttävät message_link tä samanaikaisesti, muuten viestejä ei lähetetä/vastaanoteta.

Luokanrakentajat#

message_link( 
  int32_t     index, 
  const char  *name, 
  linkType    type, 
  bool        isWired = false );

Luokan tuhoaja#

Tuhoaa message_link -objektin ja vapauttaa siihen liittyvät resurssit.

virtual ~message_link();

Parametrit#

Parametri

Tyyppi

Kuvaus

index

int32_t

Älyportti, johon V5-radio tai älykaapeli on kytketty, kirjoitetaan muodossa PORTx, jossa x on portin numero (esimerkiksi PORT1).

name

char

Viestilinkin nimi.

type

linkType

Linkin tyyppi, joko linkType::manager tai linkType::workerTätä tietoa käytetään radion oikean konfiguroinnin ja käytettävissä olevan kaistanleveyden määrittämiseen lähetystä ja vastaanottoa varten. Hallintarobotilla on kaksinkertainen käytettävissä oleva kaistanleveys (1040 tavua/sekunti) tiedon lähettämiseen työrobotille (520 tavua/sekunti).

  • linkType::manager - Message_link-objekti on hallintarobotti.
  • linkType::worker - Message_link-objekti on työrobotti.

isWired

bool

Onko message_link-objekti langallinen.

  • true - Message_link-objekti on langallinen.
  • false - Message_link-objekti on langaton.

Esimerkki#

Robotin 1 koodi

// Create a wireless link in Port 1
message_link link = message_link(
  PORT1, // index
  "VEXRoboticsLink123456789", // name
  linkType::manager, // type
  true); // isWired

Robotin 2 koodi

// Create a wireless link in Port 1
message_link link = message_link(
  PORT1, // index
  "VEXRoboticsLink123456789", // name
  linkType::worker, // type
  true); // isWired

Jäsenten toiminnot#

Luokka message_link sisältää seuraavat jäsenfunktiot:

  • isLinked — Palauttaa, onko tämä aivo aktiivisesti yhteydessä paritettuun aivoonsa.

  • send — Lähettää viestin parilliselle aivolle.

  • receive — Odottaa seuraavaa saapuvaa viestiä ja palauttaa sen.

  • received — Rekisteröi funktion kutsuttavaksi aina, kun uusi viesti vastaanotetaan.

Before calling any message_link member functions, a message_link instance must be created, as shown below:

Robotin 1 koodi

// Create a wireless link in Port 1
message_link link = message_link(
  PORT1, // index
  "VEXRoboticsLink123456789", // name
  linkType::manager, // type
  true); // isWired

Robotin 2 koodi

// Create a wireless link in Port 1
message_link link = message_link(
  PORT1, // index
  "VEXRoboticsLink123456789", // name
  linkType::worker, // type
  true); // isWired

isLinked#

isLinked -metodi palauttaa, ovatko MessageLinkin V5-aivot paritettuja toisiinsa.

Available Functions
bool isLinked();

Parameters

Tällä funktiolla ei ole parametreja.

Return Values

Tämä funktio palauttaa totuusarvon.

  • true – Kaksi V5-aivoa on yhdistetty ja kommunikoivat tämän linkin kautta.

  • false – Kahta V5-aivoa ei ole yhdistetty tällä linkillä.

Notes

On hyvä käytäntö tarkistaa aina projektin alussa, että V5-aivot on linkitetty, ennen kuin jatkat koodin suorittamista.

Examples

Robotin 1 koodi

// Tell the other robot when the screen is being pressed
  // Create the link
  message_link link = message_link(PORT1, "VEXRoboticsLink123456789", linkType::manager, true);

  // Do not run code UNTIL the Brains are linked
  while (!link.isLinked()){
    wait(0.1, seconds);
  }

  Brain.Screen.print("Robot 1 - Manager");

  // Continuously send if the screen is being pressed
  while (true){
    if (Brain.Screen.pressing()){
      link.send("pressed");
    } else {
      link.send("released");
    }
    wait(0.05, seconds);
  }

Robotin 2 koodi

// Display if the other robot's screen is being pressed

  // Create the link
  message_link link = message_link(PORT1, "VEXRoboticsLink123456789", linkType::worker, true);
  
  // Do not run code UNTIL the Brains are linked
  while (!link.isLinked()){
   wait(0.1, seconds);
  }

  // Continuously check if Robot 1 has sent "pressed"
  while (true){
    Brain.Screen.clearScreen();
    Brain.Screen.setCursor(1, 1);
    Brain.Screen.print("Robot 2 - Worker");
    Brain.Screen.newLine();
    char msg[32] = {0};                         // buffer for incoming message
    int32_t n = link.receive(msg, sizeof(msg), 100);  // wait up to 100ms
    if (n > 0 && strcmp(msg, "pressed") == 0) {
      Brain.Screen.newLine();
      Brain.Screen.print("Manager is being pressed!");
    }
    wait(0.05, seconds);
  }

send#

Lähettää viestin linkkiyhteyden kautta.

Available Functions

1 — Lähettää viestimerkkijonon.

int32_t send( 
  const char *message );

2 — Lähettää viestimerkkijonon, jossa on double.

int32_t send( 
  const char *message, 
  double      value );

3 — Lähettää viestimerkkijonon, jossa on int32_t ja double.

int32_t send(
  const char *message, 
  int32_t     index, 
  double      value );

Parameters

Parametri

Tyyppi

Kuvaus

message

const char*

Toiselle linkitetylle V5-aivoille lähetettävä viesti.

index

int32_t

Kokonaisluku, joka lähetetään toiseen linkitettyyn V5-aivoon.

value

double

Tupla lähetettäväksi toiseen linkitettyyn V5 Brainiin. Tuplat muotoillaan neljän desimaalin tarkkuudella; jos desimaaleja on vähemmän, niiden loppuun lisätään nollia, kunnes niitä on enää neljä.

Return Values

Tämä funktio ei palauta mitään arvoja.

Notes

Jos lähetetään message , toinen linkitetty V5-aivo vastaanottaa juuri kyseisen viestin.

Jos value (ja index jos sellainen on), vastaanottava aivot saavat yhden koodatun viestin, joka yhdistää kaikki kentät tässä järjestyksessä: .message_index_value

Examples

Käyttämällä funktiota link.send(“string”, 1, 2.55) vastaanotetaan muodossa .string_1_2.5500.

Robotin 1 koodi

// Tell the other robot when the screen is being pressed

// Create the link
message_link link = message_link(PORT1, "VEXRoboticsLink123456789", linkType::manager, true);

// Do not run code UNTIL the Brains are linked
while (!link.isLinked()){
  wait(0.1, seconds);
}

Brain.Screen.print("Robot 1 - Manager");

// Continuously send if the screen is being pressed
while (true){
  if (Brain.Screen.pressing()){
    link.send("pressed");
  } else {
    link.send("released");
  }
  wait(0.05, seconds);
}

Robotin 2 koodi

// Display if the other robot's screen is being pressed

// Create the link
message_link link = message_link(PORT1, "VEXRoboticsLink123456789", linkType::worker, true);

// Do not run code UNTIL the Brains are linked
while (!link.isLinked()){
  wait(0.1, seconds);
}
// Continuously check if Robot 1 has sent "pressed"
while (true){
  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1, 1);
  Brain.Screen.print("Robot 2 - Worker");
  Brain.Screen.newLine();
  char msg[32] = {0};  // buffer for incoming message
  int32_t n = link.receive(msg, sizeof(msg), 100);  // wait up to 100ms
  if (n > 0 && strcmp(msg, "pressed") == 0) {
    Brain.Screen.newLine();
    Brain.Screen.print("Manager is being pressed!");
  }
  wait(0.05, seconds);
}

receive#

Vastaanottaa viestin linkkiyhteydeltä.

Available Functions
int32_t receive(
  char     *buffer,
  int32_t   length, 
  int32_t   timeoutMs = 500 );

Parameters

Parametri

Tyyppi

Kuvaus

buffer

char*

Puskuri, johon vastaanotettu viesti tallennetaan.

length

int32_t

Puskurin pituus.

timeoutMs

int32_t

Kuinka kauan millisekunteina viesti receive odottaa uutta viestiä vain, jos jono on tyhjä. Oletusarvo on 300 000 (300 sekuntia).

Return Values

Tämä funktio palauttaa vastaanotettujen tavujen määrän.

Notes
  • receive palauttaa seuraavan jonossa olevan viestin toisesta linkitetystä V5 Brainista. Viestit luetaan FIFO-järjestyksessä (vanhin lukematon ensin). Jos jono on tyhjä, kun receive kutsutaan, se odottaa uutta viestiä määritettyyn timeout asti. Jos viestiä ei saavu kyseiseen ikkunaan, receive palauttaa arvon 0, ja kaikki sen jälkeen lähetetyt viestit jäävät jonoon luettavaksi seuraavalla kerralla, kun receive käytetään.

  • Jos toinen linkitetty V5 Brain lähetti vain string, receive palauttaa tarkalleen kyseisen merkkijonon.

  • Jos toinen linkitetty V5 Brain lähetti kokonaisluvun ja/tai liukulukun, receive palauttaa yhden koodatun merkkijonon, joka yhdistää kaikki kentät tässä järjestyksessä: .string_integer_float

    • Jos esimerkiksi toinen linkitetty V5 Brain käyttää funktiota link.send(“string”, 1, 2.55), niin funktion link.receive() käyttö palauttaa koodatun merkkijonon, kuten .string_1_2.5500Voit jakaa tämän koodatun merkkijonon (katso esimerkit alla) purkaaksesi viestin nimen, kokonaisluvun ja liukulukujen arvot.

    • Jos haluat mieluummin välttää manuaalisen jakamisen/jäsentämisen, käytä received rekisteröidäksesi käsittelijän tietylle viestin nimelle; käsittelijä vastaanottaa lähetetyt arvot argumentteina.

Examples

Käyttämällä funktiota link.send(“string”, 1, 2.55) vastaanotetaan muodossa .string_1_2.5500.

Robotin 1 koodi

// Tell the other robot when the screen is being pressed

// Create the link
message_link link = message_link(PORT1, "VEXRoboticsLink123456789", linkType::manager, true);

// Do not run code UNTIL the Brains are linked
while (!link.isLinked()){
  wait(0.1, seconds);
}

Brain.Screen.print("Robot 1 - Manager");

// Continuously send if the screen is being pressed
while (true){
  if (Brain.Screen.pressing()){
    link.send("pressed");
  } else {
    link.send("released");
  }
  wait(0.05, seconds);
}

Robotin 2 koodi

// Display if the other robot's screen is being pressed

// Create the link
message_link link = message_link(PORT1, "VEXRoboticsLink123456789", linkType::worker, true);

// Do not run code UNTIL the Brains are linked
while (!link.isLinked()){
  wait(0.1, seconds);
}
// Continuously check if Robot 1 has sent "pressed"
while (true){
  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1, 1);
  Brain.Screen.print("Robot 2 - Worker");
  Brain.Screen.newLine();
  char msg[32] = {0};   // buffer for incoming message
  int32_t n = link.receive(msg, sizeof(msg), 100);  // wait up to 100ms
  if (n > 0 && strcmp(msg, "pressed") == 0) {
    Brain.Screen.newLine();
    Brain.Screen.print("Manager is being pressed!");
  }
  wait(0.05, seconds);
}

received#

Rekisteröi funktion, jota kutsutaan aina, kun V5 Brain vastaanottaa lähetetyn viestin.

Available Functions

1 Rekisteröi takaisinsoiton kaikille vastaanotetuille viesteille (viesti + arvo).

void received(
    void (* callback)(const char *, const char *, double)
);

2 Rekisteröi takaisinsoiton kaikille vastaanotetuille viesteille (viesti + indeksi + arvo).

void received(
    void (* callback)(const char *, const char *, int32_t, double)
);

3 Rekisteröi takaisinkutsutoiminnon tietylle viestille (viesti + arvo).

void received(
    const char *message,
    void      (* callback)(const char *, const char *, double)
);

4 Rekisteröi takaisinkutsutoiminnon tietylle viestille (viesti + indeksi + arvo).

void received(
    const char *message,
    void      (* callback)(const char *, const char *, int32_t, double)
);

Parameters

Parametri

Tyyppi

Kuvaus

message

const char *

Kuunneltavan viestin nimi. Jos tämä jätetään pois, takaisinkutsu suoritetaan kaikille vastaanotetuille viesteille.

callback

void (*)(const char *, const char , double) or void ()(const char *, const char *, int32_t, double)

Funktio, joka suoritetaan, kun viesti vastaanotetaan.

Return Values

Tämä funktio ei palauta mitään arvoja.

Callback Signature

1 Vastaanottaa lähettäjän nimen, viestin nimen ja arvon.

void callback(const char *, const char *, double)

2 Vastaanottaa lähettäjän nimen, viestin nimen, indeksin ja arvon.

void callback(const char *, const char *, int32_t, double)

Tyyppi

Kuvaus

1st const char *

Lähettäjän linkin nimi.

2nd const char *

Vastaanotetun viestin nimi.

int32_t

Viestiin liittyvä indeksi.

double

Viestiin liittyvä arvo.

Examples

Robotin 1 koodi

// Create the link.
message_link link(PORT1, "LeftRightLink", linkType::manager, true);

// Send whether screen is pressed on left or right.
void screen_pressed() {
  if (Brain.Screen.xPosition() < 240) {
    link.send("left");
  } else {
    link.send("right");
  }
}

int main() {
  /* vexcodeInit() is only required when using VEXcode.
  Remove vexcodeInit() if compiling in VS Code. */
  vexcodeInit();
  
  // Do not run code UNTIL the Brains are linked.
  while (!link.isLinked()) {
    wait(0.1, seconds);
  }

  Brain.Screen.print("Robot 1 - Manager");

  Brain.Screen.pressed(screen_pressed);

  while (true) {
    wait(10, msec);
  }
}

Robotin 2 koodi

// Create variable to track where screen is pressed.
int lastPress = 0;

// Update the variable whenever a new message is received.
void message_received(const char* message, const char* linkname, double timestamp) {
  if (strcmp(message, "left") == 0)  lastPress = 1;
  if (strcmp(message, "right") == 0) lastPress = 2;
}

int main() {
  /* vexcodeInit() is only required when using VEXcode.
  Remove vexcodeInit() if compiling in VS Code. */
  vexcodeInit();

  // Create the link.
  message_link link(PORT1, "VEXRoboticsLink123456789", linkType::worker, true);

  // Do not run code UNTIL the Brains are linked.
  while (!link.isLinked()) {
    wait(0.1, seconds);
  }

  link.received(message_received);

  // Display if Robot 1's screen was pressed on the left or right
  while (true) {
    Brain.Screen.clearScreen();
    Brain.Screen.setCursor(1, 1);
    Brain.Screen.print("Robot 2 - Worker");
    Brain.Screen.newLine();

    if (lastPress == 1) {
      Brain.Screen.print("Manager pressed LEFT");
    } else if (lastPress == 2) {
      Brain.Screen.print("Manager pressed RIGHT");
    } else {
      Brain.Screen.print("Waiting...");
    }

    wait(0.1, seconds);
  }
}

<

VEXlink

>

Sarjalinkki

On this page
  • Johdanto
  • Luokanrakentajat
  • Luokan tuhoaja
  • Parametrit
  • Esimerkki
  • Jäsenten toiminnot
    • isLinked
    • send
    • receive
    • received
Innovation First, International

VEX and VEX Robotics are trademarks or service marks of Innovation First, Inc. Copyright ©2026. All Rights Reserved. VEX Robotics, Inc. is a subsidiary of Innovation First International, Inc. All other product names / marks of others are the property of their respective owners. Patents and / or Patents Pending - innovationfirst.com/patents
Site Privacy Policy / Site Terms of Use / Cookie Policy / Software Privacy Policy

Käy VEX Roboticsin Facebook-sivulla Käy VEX Roboticsin Twitter-sivulla Käy VEX Roboticsin Instagram-sivulla Käy VEX Roboticsin YouTube-sivulla
VEX API -palautelomake

Arvostamme palautettasi! Käytä tätä lomaketta jakaaksesi ehdotuksia, kehuja tai ilmoittaaksesi VEX API:n virheistä. Palautteesi auttaa meitä parantamaan VEX API:n dokumentaatiota.

​

Jos sinulla on teknisiä ongelmia tai tarvitset asiakastukea, käy osoitteessa support.vex.com.

  • Send Happy Feedback
  • Send Sad Feedback

Huomautus: nykyinen URL-osoite jaetaan viestisi kanssa.

Antamalla sähköpostiosoitteesi hyväksyt, että VEX voi lähettää sinulle sähköpostia, jos meillä on kysyttävää palautteestasi.
Tietosuojakäytäntö >
Anna palautetta. Palaute lähetetty onnistuneesti!
Choose Which VEX IQ Generation to View

VEX IQ (1st gen)

VEX IQ (2nd gen)