• 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 EXP
  • VEX EXP API -viite
  • VEXlink
  • Sarjalinkki
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
    • 3-johtimiset laitteet
    • Aivot
    • Konsoli
    • Ohjain
    • Logiikka
    • Älykkäät porttilaitteet
    • 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

Sarjalinkki#

  • Johdanto

  • Luokanrakentajat

  • Luokan tuhoaja

  • Parametrit

  • Muistiinpanoja

  • Esimerkki

  • Jäsenten toiminnot

    • onLinkitetty

    • lähetä

    • vastaanottaa

    • vastaanotettu

Johdanto#

serial_link -luokka mahdollistaa raakatavuvirran lähettämisen robottien välillä. Se on suunniteltu robottien väliseen kommunikointiin, jossa sekä lähettävä että vastaanottava robotti ymmärtävät datavirran sisällön.

Jokainen send:n käyttökerta lisää dataa linkitetyn EXP Brainin jonoon, ja jono luetaan FIFO-periaatteella (first-in, first-out). Jos useita viestejä lähetetään ennen kuin toinen EXP Brain käyttää vastaanottoa, 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 lähetä vain, kun arvot muuttuvat.

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

Luokanrakentajat#

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

Luokan tuhoaja#

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

~serial_link();

Parametrit#

Parametri

Tyyppi

Kuvaus

index

int32_t

Älyportti, johon viestilinkki on yhdistetty, kirjoitetaan muodossa PORTx, jossa x on portin numero (esimerkiksi PORT1).

name

const char*

Tämän linkin nimi. On suositeltavaa, että tämä yksilöllinen merkkijono on riittävän pitkä, jotta vexos-hajautettuna se luo yksilöllisen tunnuksen. Huono linkin nimi olisi jotain yleistä, kuten “vexlink”, koska toinen tiimi saattaa käyttää sitä.

type

linkType

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

  • linkType::manager — Serial_link-objekti on hallintaobjekti
  • linkType::worker — Serial_link-objekti on työrobotti

isWired

bool

Onko serial_link-objekti langallinen (oletusarvo false):

  • true — serial_link-objekti on langallinen
  • false — serial_link-objekti on langaton

Muistiinpanoja#

  • VEXlink tukee sekä langatonta että langallista tiedonsiirtoa, ja langallisissa yhteyksissä suositellaan muunneltua älykaapelia virransyöttöongelmien välttämiseksi.

  • Langatonta tiedonsiirtoa varten jokainen robotti tarvitsee V5-robottiradion, joka on kytketty Smart Port -porttiin.

  • VEXlink-radiota voidaan käyttää EXP-ohjaimen VEXnet-radion rinnalla, joka tulisi kytkeä korkeimman numeron Smart Port -porttiin konfliktien välttämiseksi.

  • VEXlinkin luomiseksi molemmat EXP-aivot on kytkettävä V5-robottiradioon.

Esimerkki#

Robotin 1 koodi

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

Robotin 2 koodi

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

Jäsenten toiminnot#

serial_link -luokka sisältää seuraavat jäsenfunktiot:

  • isLinked — Tarkistaa, ovatko EXP-aivot paritettuja ja kommunikoivatko ne tämän linkin kautta.

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

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

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

Ennen minkään serial_link -jäsenfunktion kutsumista on luotava serial_link -instanssi alla olevan mukaisesti:

Robotin 1 koodi

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

Robotin 2 koodi

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

isLinked#

Palauttaa, ovatko sarjalinkin EXP Brainit paritettuja toisiinsa.

Available Functions
bool isLinked();

Parameters

Tällä funktiolla ei ole parametreja.

Return Values

Palauttaa totuusarvon, joka ilmaisee, ovatko EXP-aivot linkitettyjä:

  • true — The two EXP Brains are paired and communicating on this link.
  • false — The two EXP Brains are not paired on this link.
Notes
  • On hyvä käytäntö tarkistaa aina projektin alussa, että EXP-aivot on linkitetty ennen minkään muun koodin suorittamista.

Examples

Robotin 1 koodi

// Create the link
  serial_link 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");
  Brain.Screen.newLine();
  Brain.Screen.print("Sending message...");

  // Message to send
  const char* message = "Hello Robot 2";

  // Send the message
  link.send((uint8_t*)message, strlen(message));

Robotin 2 koodi

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

  // Do not run code UNTIL the Brains are linked
  while (!link.isLinked()) {
    wait(0.1, seconds);
  }
  
  Brain.Screen.print("Robot 2 - Worker");
  Brain.Screen.newLine();
  Brain.Screen.print("Waiting...");

  // Buffer to store incoming bytes
  uint8_t buffer[32] = {0};

  int32_t n = link.receive(buffer, sizeof(buffer) - 1);

  // Null-terminate
  if (n > 0) {
    buffer[n] = 0;

    // Display the message that was sent
    Brain.Screen.clearScreen();
    Brain.Screen.setCursor(1, 1);
    Brain.Screen.print("Robot 2 - Worker");
    Brain.Screen.newLine();
    Brain.Screen.print((char*)buffer);
  }
  else {
    Brain.Screen.newLine();
    Brain.Screen.print("No message received");
  }

send#

Lähettää viestin parilliselle aivoille.

Available Functions

1 — Lähettää viestin käyttäen tavupuskuria.

int32_t send( 
  uint8_t *buffer, 
  int32_t  length );

2 — Lähettää viestin käyttäen merkkipuskuria.

int32_t send( 
  const char *buffer, 
  int32_t     length );

Parameters

Parametri

Tyyppi

Kuvaus

buffer

uint8_t* or const char*

Puskuri, joka lähetetään toiseen linkitettyyn EXP Brainiin.

length

int32_t

Lähetettävän puskurin pituus.

Return Values

Palauttaa arvon int32_t joka edustaa lähetettyjen tavujen määrää.

Examples

Robotin 1 koodi

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

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

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

  // Track last sent state
  uint8_t lastState = 255;  // impossible initial value

 // Tell Robot 2 when the screen is being pressed
  while (true) {
    uint8_t state = Brain.Screen.pressing() ? 1 : 0;

    // Only send if state changed
    if (state != lastState) {
      link.send(&state, 1);
      lastState = state;
    }

    wait(0.02, seconds);
  }

Robotin 2 koodi

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

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

  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1, 1);
  Brain.Screen.print("Robot 2 - Worker");
  Brain.Screen.newLine();
  Brain.Screen.print("Waiting...");

  // Track the last state
  uint8_t lastShown = 255;

  while (true) {
    // Variable stores 1 - pressed, 0 - not pressed 
    uint8_t state = 0;
    int32_t n = link.receive(&state, 1, 200);

    // Only update screen if state changes
    if (n == 1 && state != lastShown) {
      Brain.Screen.clearScreen();
      Brain.Screen.setCursor(1, 1);
      Brain.Screen.print("Robot 2 - Worker");
      Brain.Screen.newLine();

      // Display text if Robot 1's screen is being pressed
      if (state == 1) {
        Brain.Screen.print("Manager IS being pressed!");
      } else {
        Brain.Screen.print("Manager is NOT being pressed");
      }

      lastShown = state;
    }
    wait(0.02, seconds);
  }

receive#

Odottaa ja palauttaa seuraavan saapuvan viestin.

Available Functions

1 — Vastaanottaa viestin merkkipuskuriin, jossa on valinnainen aikakatkaisu.

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 receive odottaa uutta viestiä vain, jos jono on tyhjä (oletusarvo on 500 ms).

Return Values

Palauttaa arvon int32_t joka edustaa vastaanotettujen tavujen määrää.

Notes
  • receive palauttaa seuraavan jonossa olevan viestin toiselta linkitetyltä EXP Brainilta.

  • Viestit luetaan FIFO-järjestyksessä (vanhin lukematon ensin).

  • Jos jono on tyhjä, kun receive kutsutaan, se odottaa uutta viestiä määritettyyn timeoutMs asti.

  • Jos kyseiseen ikkunaan ei saavu viestiä, receive palauttaa arvon 0, ja kaikki sen jälkeen lähetetyt viestit jäävät jonoon luettavaksi seuraavan kerran, kun receive käytetään.

Examples

Robotin 1 koodi

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

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

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

  // Track last sent state
  uint8_t lastState = 255;  // impossible initial value

 // Tell Robot 2 when the screen is being pressed
  while (true) {
    uint8_t state = Brain.Screen.pressing() ? 1 : 0;

    // Only send if state changed
    if (state != lastState) {
      link.send(&state, 1);
      lastState = state;
    }

    wait(0.02, seconds);
  }

Robotin 2 koodi

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

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

  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1, 1);
  Brain.Screen.print("Robot 2 - Worker");
  Brain.Screen.newLine();
  Brain.Screen.print("Waiting...");

  // Track the last state
  uint8_t lastShown = 255;

  while (true) {
    // Variable stores 1 - pressed, 0 - not pressed 
    uint8_t state = 0;
    int32_t n = link.receive(&state, 1, 200);

    // Only update screen if state changes
    if (n == 1 && state != lastShown) {
      Brain.Screen.clearScreen();
      Brain.Screen.setCursor(1, 1);
      Brain.Screen.print("Robot 2 - Worker");
      Brain.Screen.newLine();

      // Display text if Robot 1's screen is being pressed
      if (state == 1) {
        Brain.Screen.print("Manager IS being pressed!");
      } else {
        Brain.Screen.print("Manager is NOT being pressed");
      }

      lastShown = state;
    }
    wait(0.02, seconds);
  }

received#

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

Available Functions

1 — Rekisteröi takaisinsoittofunktion jokaiselle vastaanotetulle viestille.

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

2 — Rekisteröi takaisinkutsutoiminnon jokaiselle vastaanotetulle viestille, joka sisältää ylimääräisen int32_t-kentän.

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

3 — Rekisteröi takaisinsoiton, joka kutsutaan vain niille vastaanotetuille viesteille, joiden nimi vastaa viestiä.

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

4 — Rekisteröi takaisinsoiton, jota kutsutaan vain niille vastaanotetuille viesteille, joiden nimi vastaa viestiä ja joissa viestin hyötykuorma sisältää ylimääräisen int32_t-kentän.

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

Parameters

Parametri

Tyyppi

Kuvaus

message

const char*

Vastaavan viestin nimi (merkkijono). Kun vastaanotetun viestin nimi vastaa tätä arvoa, kutsutaan callback -funktiota.

callback

function

Aiemmin määritelty funktio, joka suoritetaan, kun EXP Brain vastaanottaa viestin, joka vastaa arvoa message.

Return Values

Tämä funktio ei palauta arvoa.

Notes
  • received takaisinkutsufunktioita kutsutaan neljällä argumentilla:

Callback Signature

callback(message, linkname, index, value)

Argumentti

Kuvaus

message

Vastaanotetun viestin nimi (esimerkiksi “add”).

linkname

Linkin nimi, josta viesti vastaanotettiin.

index

Viestin mukana lähetetty kokonaislukuarvo (jos annettu).

value

Viestin mukana lähetetty liukuluku (jos annettu).

Examples

Robotin 1 koodi

// Send left or right when pressed
void screen_pressed() {
  if (Brain.Screen.xPosition() < 240) {
    link.send((uint8_t*)"left", 4);
  } else {
    link.send((uint8_t*)"right", 5);
  }
}

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

// Create the link
serial_link 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");


  Brain.Screen.pressed(screen_pressed);
}

Robotin 2 koodi

// Called when message received
void received_callback(uint8_t *buffer, int32_t length) {
  char msg[32];

  // Copy safely and null terminate
  int n = (length < 31) ? length : 31;
  memcpy(msg, buffer, n);
  msg[n] = '\0';

  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1,1);
  Brain.Screen.print("Robot 2 - Worker");
  Brain.Screen.newLine();

  // Display if Robot 1's screen is pressed on left or right
  if (strcmp(msg, "left") == 0) {
    Brain.Screen.print("Manager pressed LEFT");
  }
  else if (strcmp(msg, "right") == 0) {
    Brain.Screen.print("Manager pressed RIGHT");
  }
}

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

// Create the link
serial_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(received_callback);

  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1,1);
  Brain.Screen.print("Robot 2 - Worker");
  Brain.Screen.newLine();
  Brain.Screen.print("Waiting...");
}

<

Viestilinkki

>

CTE-työryhmä

On this page
  • Johdanto
  • Luokanrakentajat
  • Luokan tuhoaja
  • Parametrit
  • Muistiinpanoja
  • 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)