• 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
Pereiti prie pagrindinio turinio
Ctrl+K

< Back to Platform Select

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

Skyriaus navigacija

  • Blokai
  • Python
  • C++
    • Pavarų dėžė
    • Varikliai ir variklių valdikliai
    • Valdiklis
    • Smegenys
    • Konkurencija
    • Išmanieji prievadų įrenginiai
    • 3 laidų įrenginiai
    • Konsolė
    • Logika
    • VEXlink
      • Žinutės nuoroda
      • Nuoseklusis ryšys
    • CTE darbo vieta
  • VEXcode pamokos

Platformos navigacija

  • 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

Nuoseklusis ryšys#

  • Įvadas

  • Klasės konstruktoriai

  • Klasės destruktorius

  • Parametrai

  • Pastabos

  • Pavyzdys

  • Narių funkcijos

    • yra susietas

    • siųsti

    • gauti

    • gautas

Įvadas#

serial_link klasė leidžia siųsti neapdorotų baitų srautą tarp robotų. Ji skirta robotų tarpusavio ryšiui, kai ir siunčiantis, ir priimantis robotas supranta duomenų srauto turinį.

Kiekvieną kartą panaudojus send, duomenys pridedami prie susietos V5 Brain eilės, o eilė skaitoma FIFO (pirmas įeina, pirmas išeina) principu. Jei prieš tai, kai kiti V5 Brain naudoja „receive“, išsiunčiami keli pranešimai, jie bus saugomi ir grąžinami po vieną tokia tvarka, kokia buvo išsiųsti. Kadangi pranešimai gali būti eilėje, pakartotinis tos pačios būsenos siuntimas kiekviename cikle gali sukelti vėlavimą; laiko požiūriu kritinei logikai siųskite duomenis tik tada, kai pasikeičia reikšmės.

Svarbu: Abu robotai vienu metu turi vykdyti projektus, kurie naudoja serial_link , kitaip duomenys nebus siunčiami / gaunami.

Klasės konstruktoriai#

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

Klasės destruktorius#

Sunaikina serial_link objektą ir išlaisvina susijusius išteklius.

~serial_link();

Parametrai#

Parametras

Tipas

Aprašymas

index

int32_t

Išmanusis prievadas, prie kurio prijungta pranešimų nuoroda, užrašomas kaip PORTx, kur x yra prievado numeris (pavyzdžiui, PORT1).

name

const char*

Šios nuorodos pavadinimas. Rekomenduojama, kad ši unikali eilutė būtų pakankamai ilga, kad, „vexos“ ją apdorojus, būtų sukurtas unikalus ID. Netinkamas nuorodos pavadinimas būtų bendrinis, pvz., „vexlink“, nes jį gali naudoti kita komanda.

type

linkType

Ryšio tipas – linkType::manager arba linkType::workerŠi informacija naudojama radijo ryšiui teisingai sukonfigūruoti ir nustato galimą perdavimo ir priėmimo pralaidumą. Valdymo robotas turi dvigubai daugiau galimo pralaidumo (1040 baitų per sekundę), kad galėtų siųsti informaciją darbininko robotui (520 baitų per sekundę).

  • linkType::manager — „serial_link“ objektas yra valdymo robotas.
  • linkType::worker — „serial_link“ objektas yra darbininkas.

isWired

bool

Ar „serial_link“ objektas yra laidinis (numatytoji reikšmė yra false):

  • true — „serial_link“ objektas yra laidinis
  • false — „serial_link“ objektas yra belaidis

Pastabos#

  • „VEXlink“ palaiko tiek belaidį, tiek laidinį ryšį, o laidiniams ryšiams rekomenduojama naudoti modifikuotą išmanųjį kabelį, kad būtų išvengta maitinimo nukreipimo problemų.

  • Belaidžiam ryšiui kiekvienam robotui reikia V5 roboto radijo, prijungto prie išmaniojo prievado.

  • „VEXlink“ radiją galima naudoti kartu su „V5“ valdiklio „VEXnet“ radijo imtuvu, kuris turėtų būti prijungtas prie didžiausio numerio „Smart Port“, kad būtų išvengta konfliktų.

  • Norint sukurti VEXlink, abu V5 Brains turi būti prijungti prie V5 roboto radijo.

Pavyzdys#

1 roboto kodas

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

Roboto 2 kodas

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

Narių funkcijos#

serial_link klasėje yra šios narių funkcijos:

  • isLinked – Patikrina, ar V5 smegenys yra suporuotos ir bendrauja šiuo ryšiu.

  • send — Siunčia žinutę suporuotoms smegenims.

  • receive — Laukia ir grąžina kitą gaunamą pranešimą.

  • received — Registruoja funkciją, kuri bus iškviečiama gavus naują pranešimą.

Prieš iškviečiant bet kokias serial_link narių funkcijas, reikia sukurti serial_link egzempliorių, kaip parodyta žemiau:

1 roboto kodas

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

Roboto 2 kodas

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

isLinked#

Grąžina, ar V5 Brains nuosekliojoje jungtyje yra suporuoti vienas su kitu.

Available Functions
bool isLinked();

Parameters

Ši funkcija neturi jokių parametrų.

Return Values

Grąžina loginę reikšmę, nurodančią, ar V5 smegenys yra susietos:

  • true — The two V5 Brains are paired and communicating on this link.
  • false — The two V5 Brains are not paired on this link.
Notes
  • Prieš paleidžiant bet kokį tolesnį kodą, gera praktika yra visada patikrinti, ar V5 smegenys yra susietos projekto pradžioje.

Examples

1 roboto kodas

// 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));

Roboto 2 kodas

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

Siunčia žinutę suporuotoms smegenims.

Available Functions

1 — Siunčia pranešimą naudodamas baitų buferį.

int32_t send( 
  uint8_t *buffer, 
  int32_t  length );

2 — Siunčia pranešimą naudodamas simbolių buferį.

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

Parameters

Parametras

Tipas

Aprašymas

buffer

uint8_t* or const char*

Buferis, skirtas siųsti į kitą susietą V5 smegenų atmintį.

length

int32_t

Siunčiamo buferio ilgis.

Return Values

Grąžina int32_t nurodantį išsiųstų baitų skaičių.

Examples

1 roboto kodas

// 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);
  }

Roboto 2 kodas

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

Laukia ir grąžina kitą gaunamą pranešimą.

Available Functions

1 — Gauna pranešimą į simbolių buferį su pasirenkamu skirtuoju laiku.

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

Parameters

Parametras

Tipas

Aprašymas

buffer

char*

Buferis gautam pranešimui saugoti.

length

int32_t

Buferio ilgis.

timeoutMs

int32_t

Kiek milisekundėmis receive lauks naujo pranešimo tik tuo atveju, jei eilė tuščia (numatytoji reikšmė yra 500 ms).

Return Values

Grąžina int32_t , nurodantį gautų baitų skaičių.

Notes
  • receive grąžina kitą eilėje esantį pranešimą iš kitos susietos V5 Brain.

  • Pranešimai skaitomi FIFO tvarka (pirmiausia nuo seniausių neskaitytų).

  • Jei eilė tuščia, kai iškviečiama komanda receive , ji laukia naujo pranešimo iki nurodytos timeoutMs laikmačio.

  • Jei per tą langą negaunamas joks pranešimas, receive grąžina 0, o bet koks vėliau išsiųstas pranešimas lieka eilėje, kad būtų perskaitytas kitą kartą naudojant receive.

Examples

1 roboto kodas

// 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);
  }

Roboto 2 kodas

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

Registruoja funkciją, kuri bus iškviečiama kaskart, kai „V5 Brain“ gaus duomenis.

Available Functions

1 — Kiekvienam gautam baitų buferiui registruoja atgalinio iškvietimo funkciją.

void received( 
  void (* callback)(uint8_t *, int32_t) );

Parameters

Parametras

Tipas

Aprašymas

callback

void (*)(uint8_t *, int32_t)

Anksčiau apibrėžta funkcija, kuri paleidžiama, kai „V5 Brain“ gauna duomenis.

Return Values

Ši funkcija negrąžina reikšmės.

Notes
  • received grįžtamieji iškvietimai iškviečiami su dviem argumentais: baitų buferiu ir gautų baitų skaičiumi.

  • Gauti duomenys gali būti ne nulinės. Jei grįžtamasis iškvietimas duomenis traktuoja kaip eilutę, nukopijuokite gautus baitus į simbolių masyvą ir pridėkite nulinę nutraukiklį.

Callback Signature

callback(buffer, length)

Argumentas

Aprašymas

buffer

Rodyklė į gautą baitų buferį.

length

Gautų baitų skaičius.

Examples

1 roboto kodas

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

// 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();

  // 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);
  }
}

Roboto 2 kodas

// 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...");

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

praeitas

Žinutės nuoroda

kitas

CTE darbo vieta

On this page
  • Įvadas
  • Klasės konstruktoriai
  • Klasės destruktorius
  • Parametrai
  • Pastabos
  • Pavyzdys
  • Narių funkcijos
    • isLinked
    • send
    • receive
    • received
Innovation First, International
​

„VEX“ ir „VEX Robotics“ yra „Innovation First, Inc.“ prekių ženklai arba paslaugų ženklai. Autorių teisės © 2026Visos teisės saugomos. „VEX Robotics, Inc.“ yra „Innovation First International, Inc.“ dukterinė įmonė. Visi kiti produktų pavadinimai / prekių ženklai yra jų atitinkamų savininkų nuosavybė. Patentai ir (arba) laukiami patentų patvirtinimai - innovationfirst.com/patents
Svetainės privatumo politika / Svetainės naudojimo sąlygos / Slapukų politika / Programinės įrangos privatumo politika

Apsilankykite „VEX Robotics“ „Facebook“ puslapyje Apsilankykite „VEX Robotics“ „Twitter“ puslapyje Apsilankykite „VEX Robotics“ „Instagram“ puslapyje Apsilankykite „VEX Robotics“ „YouTube“ puslapyje
VEX API atsiliepimų forma

Vertiname jūsų atsiliepimus! Norėdami pasidalyti pasiūlymais, komplimentais arba pranešti apie VEX API klaidas, naudokite šią formą. Jūsų indėlis padeda mums tobulinti VEX API dokumentaciją.

​

Jei kyla techninių problemų arba reikia klientų pagalbos, apsilankykite support.vex.com.

  • Send Happy Feedback
  • Send Sad Feedback

Pastaba: dabartinis URL bus bendrinamas su jūsų pranešimu

Įtraukdami savo el. pašto adresą, jūs sutinkate, kad VEX gali siųsti jums el. laiškus, jei turėsime klausimų dėl jūsų atsiliepimų.
Privatumo politika >
Prašome pateikti atsiliepimą. Atsiliepimas sėkmingai pateiktas!
Choose Which VEX IQ Generation to View

VEX IQ (1st gen)

VEX IQ (2nd gen)