• 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 EXP
  • VEX EXP 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
    • 3 laidų įrenginiai
    • Smegenys
    • Konsolė
    • Valdiklis
    • Logika
    • Išmanieji prievadų įrenginiai
    • 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 susieto EXP Brain eilės, o eilė skaitoma FIFO (pirmas įeina, pirmas išeina) principu. Jei prieš tai, kai kitas EXP Brain naudoja gavimą, 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 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 EXP 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 EXP 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 EXP 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 nuosekliojoje jungtyje esančios EXP Brains yra suporuotos viena su kita.

Available Functions
bool isLinked();

Parameters

Ši funkcija neturi jokių parametrų.

Return Values

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

  • true — The two EXP Brains are paired and communicating on this link.
  • false — The two EXP Brains are not paired on this link.
Notes
  • Prieš paleidžiant bet kokį tolesnį kodą, gera praktika yra visada patikrinti, ar EXP 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, kurį reikia siųsti į kitą susietą EXP 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 EXP 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 EXP Brain gaus išsiųstą pranešimą.

Available Functions

1 — Registruoja atgalinio iškvietimo funkciją kiekvienam gautam pranešimui.

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

2 — Registruoja grįžtamąjį iškvietimą kiekvienam gautam pranešimui, kuriame yra papildomas int32_t laukas.

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

3 — Registruoja atgalinį iškvietimą tik toms gautoms žinutėms, kurių pavadinimas sutampa su pranešimu.

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

4 — Registruoja atgalinį iškvietimą, iškviečiant tik gautas žinutes, kurių pavadinimas sutampa su pranešimo pavadinimu, kai pranešimo turinys apima papildomą lauką int32_t.

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

Parameters

Parametras

Tipas

Aprašymas

message

const char*

Atitinkamas pranešimo pavadinimas (eilutė). Kai gauto pranešimo pavadinimas atitinka šią reikšmę, iškviečiama atgalinio iškvietimo callback funkcija.

callback

function

Anksčiau apibrėžta funkcija, kuri paleidžiama, kai EXP Brain gauna pranešimą, atitinkantį message.

Return Values

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

Notes
  • received atgalinių iškvietimų iškviečiami su keturiais argumentais:

Callback Signature

callback(message, linkname, index, value)

Argumentas

Aprašymas

message

Gautos žinutės pavadinimas (pavyzdžiui, “add”).

linkname

Nuorodos, iš kurios buvo gautas pranešimas, pavadinimas.

index

Sveikasis skaičius, išsiųstas su pranešimu (jei nurodyta).

value

Su pranešimu siunčiama slankiojo skaičiaus reikšmė (jei nurodyta).

Examples

1 roboto kodas

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

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

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)