• 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
Přejít k hlavnímu obsahu
Ctrl+K

< Back to Platform Select

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

Navigace v sekcích

  • Bloky
  • Python
  • C++
    • Hnací ústrojí
    • Motory a regulátory motorů
    • Ovladač
    • Mozek
    • Soutěž
    • Inteligentní portová zařízení
    • 3vodičová zařízení
    • Utěšit
    • Logika
    • VEXlink
      • Odkaz na zprávu
      • Sériové propojení
    • Pracovní buňka CTE
  • Výukové programy VEXcode

Navigace na platformě

  • 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

Sériové propojení#

  • Zavedení

  • Konstruktory tříd

  • Destruktor tříd

  • Parametry

  • Poznámky

  • Příklad

  • Členské funkce

    • jePropojeno

    • poslat

    • dostávat

    • přijato

Zavedení#

Třída serial_link umožňuje odesílání proudu nezpracovaných bajtů mezi roboty. Je navržena pro komunikaci mezi roboty, kde vysílající i přijímající robot rozumí obsahu datového proudu.

Každé použití funkce send přidává data do fronty propojeného V5 Brain a fronta se čte v systému FIFO (first in, first out). Pokud je odesláno více zpráv předtím, než ostatní V5 Brain použije funkci receive, budou uloženy a vráceny jedna po druhé v pořadí, v jakém byly odeslány. Protože se zprávy mohou řadit do fronty, opakované odesílání stejného stavu v každé smyčce může způsobit nahromadění nevyřízených dat; z časově kritické logiky odesílejte pouze při změně hodnot.

Důležité: Oba roboti musí současně spouštět projekty, které používají serial_link , jinak nebudou odesílána/přijímána žádná data.

Konstruktory tříd#

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

Destruktor tříd#

Zničí objekt serial_link a uvolní přidružené prostředky.

~serial_link();

Parametry#

Parametr

Typ

Popis

index

int32_t

Inteligentní port, ke kterému je připojen odkaz na zprávu, zapsaný jako PORTx, kde x je číslo portu (například PORT1).

name

const char*

Název tohoto odkazu. Doporučuje se, aby tento jedinečný řetězec byl dostatečně dlouhý, aby po hašování službou vexos vytvořil jedinečné ID. Špatný název odkazu by byl něco obecného, ​​například „vexlink“, protože by ho mohl používat jiný tým.

type

linkType

Typ odkazu, buď linkType::manager nebo linkType::workerTato informace se používá ke správné konfiguraci rádia a také určuje dostupnou šířku pásma pro přenos a příjem. Manažerský robot má dvojnásobnou dostupnou šířku pásma (1040 bajtů/sekundu) pro odeslání informací robotu-pracovníkovi (520 bajtů/sekundu).

  • linkType::manager — Objekt serial_link je manažer
  • linkType::worker — Objekt serial_link je pracovník

isWired

bool

Zda je objekt serial_link připojen kabelem (výchozí hodnota je false):

  • true — Objekt serial_link je připojen kabelem
  • false — Objekt serial_link je bezdrátový

Poznámky#

  • VEXlink podporuje bezdrátovou i kabelovou komunikaci, přičemž pro kabelové připojení se doporučuje použít upravený inteligentní kabel, aby se předešlo problémům s vedením napájení.

  • Pro bezdrátovou komunikaci potřebuje každý robot rádio V5 připojené k inteligentnímu portu.

  • Rádiový modul VEXlink lze použít společně s rádiovým modulem VEXnet řídicí jednotky V5, který by měl být připojen k nejvyššímu číslu inteligentního portu, aby se předešlo konfliktům.

  • Pro vytvoření VEXlinku musí být oba V5 Brains připojeny k robotickému rádiu V5.

Příklad#

Kód pro robota 1

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

Kód pro Robota 2

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

Členské funkce#

Třída serial_link obsahuje následující členské funkce:

  • isLinked — Zkontroluje, zda jsou mozky V5 spárované a komunikují na tomto spojení.

  • send — Odešle zprávu spárovanému mozku.

  • receive — Čeká na další příchozí zprávu a vrací ji.

  • received — Registruje funkci, která má být volána při každém přijetí nové zprávy.

Před voláním jakékoli členské funkce typu serial_link musí být vytvořena instance serial_link , jak je znázorněno níže:

Kód pro robota 1

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

Kód pro Robota 2

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

isLinked#

Vrací, zda jsou V5 Brains na sériovém propojení vzájemně spárovány.

Available Functions
bool isLinked();

Parameters

Tato funkce nemá žádné parametry.

Return Values

Vrací booleovskou hodnotu označující, zda jsou mozky V5 propojeny:

  • true — The two V5 Brains are paired and communicating on this link.
  • false — The two V5 Brains are not paired on this link.
Notes
  • Je dobrým zvykem vždy zkontrolovat, zda jsou V5 Brains propojeny na začátku projektu, než spustíte jakýkoli další kód.

Examples

Kód pro robota 1

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

Kód pro Robota 2

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

Odešle zprávu spárovanému mozku.

Available Functions

1 — Odešle zprávu s využitím bajtové vyrovnávací paměti.

int32_t send( 
  uint8_t *buffer, 
  int32_t  length );

2 — Odešle zprávu s použitím vyrovnávací paměti znaků.

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

Parameters

Parametr

Typ

Popis

buffer

uint8_t* or const char*

Vyrovnávací paměť, která se má odeslat do druhého propojeného V5 Brainu.

length

int32_t

Délka vyrovnávací paměti, která se má odeslat.

Return Values

Vrací hodnotu int32_t představující počet odeslaných bajtů.

Examples

Kód pro robota 1

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

Kód pro Robota 2

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

Čeká na další příchozí zprávu a vrací ji.

Available Functions

1 — Přijme zprávu do vyrovnávací paměti znaků s volitelným časovým limitem.

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

Parameters

Parametr

Typ

Popis

buffer

char*

Vyrovnávací paměť pro uložení přijaté zprávy.

length

int32_t

Délka vyrovnávací paměti.

timeoutMs

int32_t

Jak dlouho v milisekundách receive bude čekat na novou zprávu pouze v případě, že je fronta prázdná (výchozí hodnota je 500 ms).

Return Values

Vrací hodnotu int32_t představující počet přijatých bajtů.

Notes
  • receive vrací další zprávu ve frontě z druhého propojeného V5 Brainu.

  • Zprávy se čtou v pořadí FIFO (nejstarší nepřečtené jako první).

  • Pokud je fronta při volání funkce receive prázdná, čeká na novou zprávu až do zadaného časového limitu timeoutMs.

  • Pokud v tomto okně nedorazí žádná zpráva, receive vrátí 0a jakákoli zpráva odeslaná poté zůstane ve frontě ke čtení při příštím použití receive.

Examples

Kód pro robota 1

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

Kód pro Robota 2

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

Registruje funkci, která se má volat vždy, když V5 Brain přijme data.

Available Functions

1 — Zaregistruje funkci zpětného volání pro každý přijatý bajtový buffer.

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

Parameters

Parametr

Typ

Popis

callback

void (*)(uint8_t *, int32_t)

Dříve definovaná funkce, která se spustí, když V5 Brain přijme data.

Return Values

Tato funkce nevrací hodnotu.

Notes
  • received zpětných volání se volají se dvěma argumenty: bajtovou vyrovnávací pamětí a počtem přijatých bajtů.

  • Přijatá data nemusí být zakončena nulovým znakem. Pokud zpětné volání zachází s daty jako s řetězcem, zkopírujte přijaté bajty do pole znaků a přidejte nulový ukončovací znak.

Callback Signature

callback(buffer, length)

Argument

Popis

buffer

Ukazatel na vyrovnávací paměť přijatých bajtů.

length

Počet přijatých bajtů.

Examples

Kód pro robota 1

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

Kód pro Robota 2

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

předchozí

Odkaz na zprávu

další

Pracovní buňka CTE

On this page
  • Zavedení
  • Konstruktory tříd
  • Destruktor tříd
  • Parametry
  • Poznámky
  • Příklad
  • Členské funkce
    • 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

Navštivte stránku VEX Robotics na Facebooku Navštivte stránku VEX Robotics na Twitteru Navštivte instagramovou stránku VEX Robotics Navštivte stránku VEX Robotics na YouTube
Formulář pro zpětnou vazbu k VEX API

Vážíme si vaší zpětné vazby! Pomocí tohoto formuláře se s námi podělte o návrhy, pochvaly nebo nahlaste chyby týkající se VEX API. Vaše podněty nám pomohou vylepšit dokumentaci k VEX API.

​

Pokud máte technické problémy nebo potřebujete zákaznickou podporu, navštivte prosím support.vex.com.

  • Send Happy Feedback
  • Send Sad Feedback

Poznámka: Aktuální URL adresa bude sdílena s vaší zprávou

Uvedením své e-mailové adresy souhlasíte s tím, že vám společnost VEX může zasílat e-maily, pokud budeme mít dotazy k vaší zpětné vazbě.
Zásady ochrany osobních údajů >
Prosím, poskytněte nám svůj názor. Zpětná vazba byla úspěšně odeslána!
Choose Which VEX IQ Generation to View

VEX IQ (1st gen)

VEX IQ (2nd gen)