• 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
Ugrás a fő tartalomra
Ctrl+K

< Back to Platform Select

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

Szakasz navigáció

  • Blokkok
  • Python
  • C++
    • Hajtáslánc
    • Motorok és motorvezérlők
    • vezérlő
    • Agy
    • Verseny
    • Intelligens porteszközök
    • 3 vezetékes eszközök
    • Konzol
    • Logika
    • VEXlink
      • Üzenetlink
      • Soros kapcsolat
    • CTE munkacella
  • VEXcode oktatóanyagok

Platformnavigáció

  • 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

Soros kapcsolat#

  • Bevezetés

  • Osztálykonstruktorok

  • Osztálydestruktor

  • Paraméterek

  • Megjegyzések

  • Példa

  • Tagfüggvények

    • isLinked

    • elküld

    • kap

    • kapott

Bevezetés#

A serial_link osztály lehetővé teszi nyers bájtok folyamának küldését robotok között. Robotok közötti kommunikációra tervezték, ahol a küldő és a fogadó robot egyaránt érti az adatfolyam tartalmát.

A send minden egyes használata adatokat ad hozzá a csatolt V5 Brain sorához, és a sor FIFO (first-in, first-out) elv alapján kerül olvasásra. Ha több üzenet is elküldésre kerül, mielőtt a többi V5 Brain fogadó utasítást használna, akkor azok egyenként, a küldés sorrendjében kerülnek tárolásra és visszaküldésre. Mivel az üzenetek sorba állíthatók, az állapot ismételt elküldése minden ciklusban várakozást okozhat; időkritikus logika esetén csak akkor küldjön üzenetet, ha az értékek megváltoznak.

Fontos: Mindkét robotnak egyszerre kell olyan projekteket futtatnia, amelyek serial_link használják, különben nem történik adatküldés/fogadás.

Osztálykonstruktorok#

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

Osztálydestruktor#

Megsemmisíti a serial_link objektumot és felszabadítja a hozzá tartozó erőforrásokat.

~serial_link();

Paraméterek#

Paraméter

Típus

Leírás

index

int32_t

Az üzenetkapcsolathoz tartozó intelligens port, amelyet PORTxalakban írunk le, ahol x a portszám (például PORT1).

name

const char*

A link neve. Javasoljuk, hogy ez az egyedi karakterlánc elég hosszú legyen ahhoz, hogy a vexos általi hashelése egyedi azonosítót hozzon létre. Egy rossz linknév valami általános lenne, például a „vexlink”, mivel azt egy másik csapat is használhatja.

type

linkType

A kapcsolat típusa, vagy linkType::manager , vagy linkType::workerEz az információ a rádió megfelelő konfigurálására szolgál, valamint meghatározza az átvitelhez és vételhez rendelkezésre álló sávszélességet. Egy menedzser robot kétszer akkora sávszélességgel rendelkezik (1040 bájt/másodperc), hogy információt küldjön a dolgozó robotnak (520 bájt/másodperc).

  • linkType::manager — A serial_link objektum egy menedzser
  • linkType::worker — A serial_link objektum egy dolgozó

isWired

bool

Azt jelzi, hogy a serial_link objektum vezetékes-e (alapértelmezett érték: false):

  • true — A serial_link objektum vezetékes
  • false — A serial_link objektum vezeték nélküli

Megjegyzések#

  • A VEXlink támogatja mind a vezeték nélküli, mind a vezetékes kommunikációt, vezetékes csatlakozás esetén pedig módosított intelligens kábel használata ajánlott az áramellátási problémák elkerülése érdekében.

  • A vezeték nélküli kommunikációhoz minden robotnak szüksége van egy V5 Robot Radio-ra, amely egy Smart Porthoz csatlakozik.

  • A VEXlink rádió használható a V5 vezérlő VEXnet rádiója mellett, amelyet a konfliktusok elkerülése érdekében a legmagasabb számú Smart Porthoz kell csatlakoztatni.

  • VEXlink létrehozásához mindkét V5 Brain-t csatlakoztatni kell egy V5 Robot Rádióhoz.

Példa#

1. robot kódja

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

Robot 2 kódja

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

Tagfüggvények#

A serial_link osztály a következő tagfüggvényeket tartalmazza:

  • isLinked — Ellenőrzi, hogy a V5 Brains párosítva vannak-e és kommunikálnak-e ezen a kapcsolaton.

  • send — Üzenetet küld a párosított Agynak.

  • receive — Várakozás a következő bejövő üzenetre, majd visszaküldi azt.

  • received — Regisztrál egy függvényt, amely minden új üzenet érkezésekor meghívódik.

Bármely serial_link tagfüggvény meghívása előtt létre kell hozni egy serial_link példányt, az alábbiak szerint:

1. robot kódja

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

Robot 2 kódja

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

isLinked#

Visszaadja, hogy a soros kapcsolaton lévő V5 Brain-ek párosítva vannak-e egymással.

Available Functions
bool isLinked();

Parameters

Ennek a függvénynek nincsenek paraméterei.

Return Values

Egy logikai értéket ad vissza, amely jelzi, hogy a V5 Brains össze van-e kapcsolva:

  • true — The two V5 Brains are paired and communicating on this link.
  • false — The two V5 Brains are not paired on this link.
Notes
  • Jó gyakorlat, ha a projekt elején mindig ellenőrizzük, hogy a V5 Brain-ek össze vannak-e kapcsolva, mielőtt bármilyen további kódot futtatnánk.

Examples

1. robot kódja

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

Robot 2 kódja

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

Üzenetet küld a párosított Agynak.

Available Functions

1 — Bájtpuffer használatával küld üzenetet.

int32_t send( 
  uint8_t *buffer, 
  int32_t  length );

2 — Karakterpuffer használatával küld üzenetet.

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

Parameters

Paraméter

Típus

Leírás

buffer

uint8_t* or const char*

A másik összekapcsolt V5 Brain-nek küldendő puffer.

length

int32_t

A küldendő puffer hossza.

Return Values

Egy int32_t értéket ad vissza, amely az elküldött bájtok számát jelöli.

Examples

1. robot kódja

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

Robot 2 kódja

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

Megvárja és visszaküldi a következő bejövő üzenetet.

Available Functions

1 — Karakterpufferbe fogad egy üzenetet, opcionális időtúllépéssel.

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

Parameters

Paraméter

Típus

Leírás

buffer

char*

A fogadott üzenet tárolására szolgáló puffer.

length

int32_t

A puffer hossza.

timeoutMs

int32_t

Mennyi ideig (ezredmásodpercben) vár a receive új üzenetre, ha a sor üres (alapértelmezett érték 500 ms).

Return Values

Egy int32_t értéket ad vissza, amely a fogadott bájtok számát jelöli.

Notes
  • A receive visszaadja a másik összekapcsolt V5 Brain következő sorban álló üzenetét.

  • Az üzenetek FIFO sorrendben kerülnek olvasásra (a legrégebbi olvasatlannal kezdődnek).

  • Ha a várólista üres a receive meghívásakor, akkor a megadott timeoutMs ideig vár új üzenetre.

  • Ha az adott ablakban nem érkezik üzenet, receive parancs 0értéket ad vissza, és az utána küldött üzenetek a sorban maradnak, hogy receive parancs következő használatakor beolvassák őket.

Examples

1. robot kódja

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

Robot 2 kódja

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

Regisztrál egy függvényt, amely minden alkalommal meghívódik, amikor a V5 Brain adatot kap.

Available Functions

1 — Minden fogadott bájtpufferhez regisztrál egy visszahívó függvényt.

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

Parameters

Paraméter

Típus

Leírás

callback

void (*)(uint8_t *, int32_t)

Egy korábban definiált függvény, amely akkor fut le, amikor a V5 Brain adatokat fogad.

Return Values

Ez a függvény nem ad vissza értéket.

Notes
  • received visszahívásokat két argumentummal hívjuk meg: egy bájtpufferrel és a fogadott bájtok számával.

  • A fogadott adat nem feltétlenül nullterminált. Ha a visszahívás karakterláncként kezeli az adatot, másolja a fogadott bájtokat egy karaktertömbbe, és adjon hozzá egy nullterminátort.

Callback Signature

callback(buffer, length)

Érv

Leírás

buffer

Egy mutató a fogadott bájtpufferre.

length

A fogadott bájtok száma.

Examples

1. robot kódja

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

Robot 2 kódja

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

előző

Üzenetlink

következő

CTE munkacella

On this page
  • Bevezetés
  • Osztálykonstruktorok
  • Osztálydestruktor
  • Paraméterek
  • Megjegyzések
  • Példa
  • Tagfüggvények
    • isLinked
    • send
    • receive
    • received
Innovation First, International
​

A VEX és a VEX Robotics az Innovation First, Inc. védjegyei vagy szolgáltatásjegyei. Copyright ©2026Minden jog fenntartva. A VEX Robotics, Inc. az Innovation First International, Inc. leányvállalata. Minden más terméknév/védjegy a megfelelő tulajdonosok tulajdona. Szabadalmak és/vagy függőben lévő szabadalmak - innovationfirst.com/patents
Webhely adatvédelmi szabályzata / Webhely felhasználási feltételei / Süti szabályzat / Szoftver adatvédelmi szabályzata

Látogassa meg a VEX Robotics Facebook oldalát Látogassa meg a VEX Robotics Twitter-oldalát Látogassa meg a VEX Robotics Instagram oldalát Látogassa meg a VEX Robotics YouTube oldalát
VEX API visszajelző űrlap

Visszajelzése nagyra értékeljük! Ezen az űrlapon javaslatokat, dicséreteket oszthat meg, vagy hibákat jelenthet a VEX API-val kapcsolatban. Hozzászólása segít nekünk a VEX API dokumentációjának fejlesztésében.

​

Ha technikai problémákat tapasztal, vagy ügyfélszolgálatra van szüksége, kérjük, látogasson el support.vex.comweboldalra.

  • Send Happy Feedback
  • Send Sad Feedback

Megjegyzés: az aktuális URL-cím megosztásra kerül az üzenettel.

Az e-mail címed megadásával hozzájárulsz ahhoz, hogy a VEX e-maileket küldjön neked, ha kérdéseink vannak a visszajelzéseddel kapcsolatban.
Adatvédelmi irányelvek >
Kérjük, adja meg visszajelzését. Visszajelzés sikeresen elküldve!
Choose Which VEX IQ Generation to View

VEX IQ (1st gen)

VEX IQ (2nd gen)