• 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
Langsung ke konten utama
Ctrl+K

< Back to Platform Select

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

Navigasi Bagian

  • Blok
  • Python
  • C++
    • Sistem penggerak
    • Motor dan Pengontrol Motor
    • Perangkat 3-Kabel
    • Otak
    • Menghibur
    • Pengontrol
    • Logika
    • Perangkat Port Pintar
    • VEXlink
      • Tautan Pesan
      • Tautan Serial
    • Sel Kerja CTE
  • Tutorial VEXcode

Navigasi 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

Tautan Serial#

  • Perkenalan

  • Konstruktor Kelas

  • Destruktor Kelas

  • Parameter

  • Catatan

  • Contoh

  • Fungsi Keanggotaan

    • terhubung

    • mengirim

    • menerima

    • diterima

Perkenalan#

Kelas serial_link memungkinkan pengiriman aliran byte mentah antar robot. Kelas ini dirancang untuk komunikasi antar robot di mana robot pengirim dan penerima sama-sama memahami isi aliran data tersebut.

Setiap penggunaan send menambahkan data ke antrian EXP Brain yang terhubung, dan antrian dibaca masuk pertama keluar pertama (FIFO). Jika beberapa pesan dikirim sebelum EXP Brain lain menggunakan fungsi terima, pesan-pesan tersebut akan disimpan dan dikembalikan satu per satu sesuai urutan pengirimannya. Karena pesan dapat mengantri, mengirim status yang sama berulang kali setiap putaran dapat menyebabkan penumpukan; untuk logika yang sensitif terhadap waktu, kirim hanya ketika nilai berubah.

Penting: Kedua robot harus menjalankan proyek yang menggunakan serial_link secara bersamaan, jika tidak, tidak ada data yang akan dikirim/diterima.

Konstruktor Kelas#

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

Destruktor Kelas#

Menghapus objek serial_link dan melepaskan sumber daya terkait.

~serial_link();

Parameter#

Parameter

Jenis

Keterangan

index

int32_t

Port Pintar yang terhubung dengan tautan pesan, ditulis sebagai PORTx, di mana x adalah nomor port (misalnya, PORT1).

name

const char*

Nama tautan ini. Disarankan agar string unik ini cukup panjang sehingga ketika di-hash oleh vexos akan menghasilkan ID unik. Nama tautan yang buruk adalah sesuatu yang generik seperti “vexlink” karena mungkin digunakan oleh tim lain.

type

linkType

Jenis tautan, yaitu linkType::manager atau linkType::workerInformasi ini digunakan untuk mengkonfigurasi radio dengan benar dan juga menentukan bandwidth yang tersedia untuk transmisi dan penerimaan. Robot manajer memiliki bandwidth dua kali lipat (1040 byte/detik) untuk mengirim informasi ke robot pekerja (520 byte/detik).

  • linkType::manager — Objek serial_link adalah manajer
  • linkType::worker — Objek serial_link adalah pekerja

isWired

bool

Apakah objek serial_link terhubung melalui kabel (nilai default false):

  • true — Objek serial_link terhubung melalui kabel
  • false — Objek serial_link nirkabel

Catatan#

  • VEXlink mendukung komunikasi nirkabel dan kabel, dengan koneksi kabel yang merekomendasikan kabel pintar yang dimodifikasi untuk mencegah masalah perutean daya.

  • Untuk komunikasi nirkabel, setiap robot membutuhkan Radio Robot V5 yang terhubung ke Smart Port.

  • Radio VEXlink dapat digunakan bersamaan dengan radio VEXnet pada EXP Controller, yang harus dihubungkan ke Smart Port dengan nomor tertinggi untuk menghindari konflik.

  • Untuk membuat VEXlink, kedua EXP Brain harus dihubungkan ke V5 Robot Radio.

Contoh#

Kode untuk Robot 1

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

Kode untuk Robot 2

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

Fungsi Keanggotaan#

Kelas serial_link mencakup fungsi anggota berikut:

  • isLinked — Memeriksa apakah EXP Brains berpasangan dan berkomunikasi pada tautan ini.

  • send — Mengirim pesan ke Otak yang berpasangan.

  • receive — Menunggu dan mengembalikan pesan masuk berikutnya.

  • received — Mendaftarkan fungsi yang akan dipanggil setiap kali pesan baru diterima.

Sebelum memanggil fungsi anggota serial_link apa pun, sebuah instance serial_link harus dibuat, seperti yang ditunjukkan di bawah ini:

Kode untuk Robot 1

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

Kode untuk Robot 2

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

isLinked#

Mengembalikan nilai yang menunjukkan apakah EXP Brain pada tautan serial telah dipasangkan satu sama lain.

Available Functions
bool isLinked();

Parameters

Fungsi ini tidak memiliki parameter apa pun.

Return Values

Mengembalikan nilai Boolean yang menunjukkan apakah EXP Brains terhubung atau tidak:

  • true — The two EXP Brains are paired and communicating on this link.
  • false — The two EXP Brains are not paired on this link.
Notes
  • Sebaiknya selalu periksa untuk memastikan EXP Brains sudah terhubung di awal proyek sebelum menjalankan kode lebih lanjut.

Examples

Kode untuk Robot 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));

Kode untuk Robot 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#

Mengirim pesan ke Otak yang berpasangan.

Available Functions

1 — Mengirim pesan menggunakan buffer byte.

int32_t send( 
  uint8_t *buffer, 
  int32_t  length );

2 — Mengirim pesan menggunakan buffer karakter.

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

Parameters

Parameter

Jenis

Keterangan

buffer

uint8_t* or const char*

Buffer yang akan dikirim ke EXP Brain lain yang terhubung.

length

int32_t

Panjang buffer yang akan dikirim.

Return Values

Mengembalikan nilai int32_t yang mewakili jumlah byte yang dikirim.

Examples

Kode untuk Robot 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);
  }

Kode untuk Robot 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#

Menunggu dan mengembalikan pesan masuk berikutnya.

Available Functions

1 — Menerima pesan ke dalam buffer karakter dengan batas waktu opsional.

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

Parameters

Parameter

Jenis

Keterangan

buffer

char*

Buffer untuk menyimpan pesan yang diterima.

length

int32_t

Panjang buffer.

timeoutMs

int32_t

Berapa lama dalam milidetik receive akan menunggu pesan baru hanya jika antrean kosong (nilai default 500ms).

Return Values

Mengembalikan nilai int32_t yang mewakili jumlah byte yang diterima.

Notes
  • receive mengembalikan pesan antrian berikutnya dari EXP Brain terkait lainnya.

  • Pesan dibaca berdasarkan urutan FIFO (pesan terlama yang belum dibaca terlebih dahulu).

  • Jika antrean kosong saat perintah receive dipanggil, maka antrean akan menunggu hingga timeoutMs untuk pesan baru.

  • Jika tidak ada pesan yang tiba dalam jendela waktu tersebut, receive mengembalikan 0, dan pesan apa pun yang dikirim setelahnya tetap berada dalam antrian untuk dibaca pada saat berikutnya receive digunakan.

Examples

Kode untuk Robot 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);
  }

Kode untuk Robot 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#

Mendaftarkan fungsi yang akan dipanggil setiap kali EXP Brain menerima pesan yang dikirim.

Available Functions

1 — Mendaftarkan fungsi callback untuk setiap pesan yang diterima.

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

2 — Mendaftarkan fungsi callback yang dipanggil untuk setiap pesan yang diterima yang menyertakan bidang int32_t tambahan.

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

3 — Mendaftarkan fungsi callback yang hanya dipanggil untuk pesan yang diterima yang namanya cocok dengan pesan tersebut.

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

4 — Mendaftarkan fungsi callback yang hanya dipanggil untuk pesan yang diterima yang namanya cocok dengan pesan, di mana muatan pesan mencakup bidang int32_t tambahan.

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

Parameters

Parameter

Jenis

Keterangan

message

const char*

The message name (string) to match. When a received message’s name matches this value, the callback function is called.

callback

function

Fungsi yang telah didefinisikan sebelumnya yang dijalankan ketika EXP Brain menerima pesan yang cocok dengan message.

Return Values

Fungsi ini tidak mengembalikan nilai.

Notes
  • received panggilan balik yang dipanggil dengan empat argumen:

Callback Signature

callback(message, linkname, index, value)

Argumen

Keterangan

message

Nama pesan yang diterima (misalnya, “add”).

linkname

Nama tautan tempat pesan diterima.

index

Nilai bilangan bulat yang dikirim bersama pesan (jika disediakan).

value

Nilai float yang dikirim bersama pesan (jika disediakan).

Examples

Kode untuk Robot 1

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

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

sebelum

Tautan Pesan

berikut

Sel Kerja CTE

On this page
  • Perkenalan
  • Konstruktor Kelas
  • Destruktor Kelas
  • Parameter
  • Catatan
  • Contoh
  • Fungsi Keanggotaan
    • 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

Kunjungi Halaman Facebook VEX Robotics Kunjungi Halaman Twitter VEX Robotics Kunjungi Halaman Instagram VEX Robotics Kunjungi Halaman YouTube VEX Robotics
Formulir Umpan Balik API VEX

Kami menghargai masukan Anda! Gunakan formulir ini untuk berbagi saran, pujian, atau melaporkan kesalahan pada API VEX. Masukan Anda membantu kami meningkatkan dokumentasi API VEX.

​

Jika Anda mengalami masalah teknis atau memerlukan dukungan pelanggan, silakan kunjungi support.vex.com.

  • Send Happy Feedback
  • Send Sad Feedback

Catatan: URL saat ini akan dibagikan bersama pesan Anda.

Dengan mencantumkan alamat email Anda, Anda setuju bahwa VEX dapat mengirimkan email kepada Anda jika kami memiliki pertanyaan tentang masukan Anda.
Kebijakan Privasi >
Mohon berikan masukan Anda. Masukan berhasil dikirim!
Choose Which VEX IQ Generation to View

VEX IQ (1st gen)

VEX IQ (2nd gen)