• 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
Ana içeriğe atla
Ctrl+K

< Back to Platform Select

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

Bölüm Gezinme

  • Bloklar
  • Python
  • C++
    • Aktarma organları
    • Motorlar ve Motor Kontrol Cihazları
    • 3 Kablolu Cihazlar
    • Beyin
    • Konsol
    • Kontrolör
    • Mantık
    • Akıllı Bağlantı Noktası Cihazları
    • VEXlink
      • Mesaj Bağlantısı
      • Seri Bağlantı
    • CTE Çalışma Hücresi
  • VEXcode Eğitimleri

Platform Navigasyonu

  • 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

Seri Bağlantı#

  • giriiş

  • Sınıf Oluşturucuları

  • Sınıf Yıkıcısı

  • Parametreler

  • Notlar

  • Örnek

  • Üye Fonksiyonları

    • Bağlantılı

    • Göndermek

    • almak

    • kabul edilmiş

giriiş#

serial_link sınıfı, robotlar arasında ham bayt akışının gönderilmesine olanak tanır. Hem gönderen hem de alıcı robotun veri akışının içeriğini anladığı robotlar arası iletişim için tasarlanmıştır.

send’nin her kullanımı, bağlantılı EXP Beyninin kuyruğuna veri ekler ve kuyruk ilk giren ilk çıkar (FIFO) prensibiyle okunur. Diğer EXP Beyni alma işlemini kullanmadan önce birden fazla mesaj gönderilirse, bunlar depolanır ve gönderildikleri sırayla tek tek geri döndürülür. Mesajlar kuyruğa alınabildiğinden, her döngüde aynı durumu tekrar tekrar göndermek birikmeye neden olabilir; zaman açısından kritik mantık için, yalnızca değerler değiştiğinde gönderin.

Önemli: Her iki robot da aynı anda serial_link kullanan projeleri çalıştırıyor olmalıdır, aksi takdirde veri gönderilemez/alınamaz.

Sınıf Oluşturucuları#

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

Sınıf Yıkıcısı#

serial_link nesnesini yok eder ve ilişkili kaynakları serbest bırakır.

~serial_link();

Parametreler#

Parametre

Tip

Tanım

index

int32_t

Mesaj bağlantısının bağlı olduğu Akıllı Bağlantı Noktası, PORTxşeklinde yazılır; burada x bağlantı noktası numarasıdır (örneğin, PORT1).

name

const char*

Bu bağlantının adı. Bu benzersiz dizenin, Vexos tarafından karma algoritmasıyla işlendiğinde benzersiz bir kimlik oluşturacak kadar uzun olması önerilir. “Vexlink” gibi genel bir bağlantı adı kötü bir seçim olur, çünkü başka bir ekip tarafından da kullanılabilir.

type

linkType

Bağlantı türü, ya linkType::manager ya da linkType::worker. Bu bilgi, radyonun doğru şekilde yapılandırılması ve ayrıca iletim ve alım için kullanılabilir bant genişliğinin belirlenmesi için kullanılır. Bir yönetici robot, işçi robota bilgi göndermek için iki kat daha fazla kullanılabilir bant genişliğine (1040 bayt/saniye) sahiptir (işçi robot 520 bayt/saniye).

  • linkType::manager — serial_link nesnesi bir yöneticidir
  • linkType::worker — serial_link nesnesi bir işçidir

isWired

bool

serial_link nesnesinin kablolu olup olmadığı (varsayılan değer false):

  • true — serial_link nesnesi kablolu
  • false — serial_link nesnesi kablosuz

Notlar#

  • VEXlink hem kablosuz hem de kablolu iletişimi destekler; kablolu bağlantılar için güç yönlendirme sorunlarını önlemek amacıyla modifiye edilmiş akıllı bir kablo önerilir.

  • Kablosuz iletişim için her robotun bir Akıllı Bağlantı Noktasına bağlı bir V5 Robot Radyosuna ihtiyacı vardır.

  • VEXlink Radyo, EXP Kontrol Cihazının VEXnet radyosuyla birlikte kullanılabilir; çakışmaları önlemek için VEXnet radyosunun en yüksek numaralı Akıllı Bağlantı Noktasına bağlanması gerekir.

  • VEXlink oluşturmak için her iki EXP Beyninin de bir V5 Robot Radyosuna bağlanması gerekir.

Örnek#

Robot 1 için Kod

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

Robot 2 için Kod

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

Üye Fonksiyonları#

serial_link sınıfı aşağıdaki üye fonksiyonlarını içerir:

  • isLinked — EXP Beyinlerinin bu bağlantı üzerinden eşleştirilip iletişim kurup kurmadığını kontrol eder.

  • send — Eşleştirilmiş Beyne bir mesaj gönderir.

  • receive — Bir sonraki gelen mesajı bekler ve geri döndürür.

  • received — Yeni bir mesaj alındığında çağrılacak bir fonksiyonu kaydeder.

serial_link üye fonksiyonunu çağırmadan önce, aşağıda gösterildiği gibi bir serial_link örneği oluşturulmalıdır:

Robot 1 için Kod

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

Robot 2 için Kod

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

isLinked#

Seri bağlantıdaki EXP Beyinlerinin birbiriyle eşleştirilip eşleştirilmediğini döndürür.

Available Functions
bool isLinked();

Parameters

Bu fonksiyonun herhangi bir parametresi yoktur.

Return Values

EXP Beyinlerinin birbirine bağlı olup olmadığını gösteren bir Boolean değeri döndürür:

  • true — The two EXP Brains are paired and communicating on this link.
  • false — The two EXP Brains are not paired on this link.
Notes
  • Herhangi bir kod çalıştırmadan önce projenin başlangıcında EXP Brains’in bağlantılı olduğundan emin olmak her zaman iyi bir uygulamadır.

Examples

Robot 1 için Kod

// 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 için Kod

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

Eşleştirilmiş beyne bir mesaj gönderir.

Available Functions

1 — Bir bayt arabelleği kullanarak mesaj gönderir.

int32_t send( 
  uint8_t *buffer, 
  int32_t  length );

2 — Karakter arabelleği kullanarak mesaj gönderir.

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

Parameters

Parametre

Tip

Tanım

buffer

uint8_t* or const char*

Diğer bağlantılı EXP Beynine gönderilecek tampon dosya.

length

int32_t

Gönderilecek arabelleğin uzunluğu.

Return Values

Gönderilen bayt sayısını temsil eden int32_t değerini döndürür.

Examples

Robot 1 için Kod

// 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 için Kod

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

Gelen bir sonraki mesajı bekler ve geri gönderir.

Available Functions

1 — İsteğe bağlı zaman aşımı ile bir karakter arabelleğine mesaj alır.

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

Parameters

Parametre

Tip

Tanım

buffer

char*

Alınan mesajı saklamak için kullanılan tampon bellek.

length

int32_t

Tamponun uzunluğu.

timeoutMs

int32_t

receive mesaj alma süresi yalnızca kuyruk boşsa yeni bir mesaj için beklenir.

Return Values

Alınan bayt sayısını temsil eden int32_t değerini döndürür.

Notes
  • receive alırsa, bağlantılı diğer EXP Beyninden sıradaki bir sonraki mesajı döndürür.

  • Mesajlar FIFO (en eski okunmamış olan önce) sırasına göre okunur.

  • receive çağrıldığında kuyruk boşsa, yeni bir mesaj için belirtilen timeoutMs süresine kadar bekler.

  • Eğer o zaman diliminde hiçbir mesaj gelmezse, receive 0değerini döndürür ve daha sonra gönderilen herhangi bir mesaj, bir sonraki receive kullanımında okunmak üzere kuyrukta kalır.

Examples

Robot 1 için Kod

// 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 için Kod

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

EXP Brain’in gönderilen bir mesajı aldığı her seferinde çağrılacak bir fonksiyonu kaydeder.

Available Functions

1 — Alınan her mesaj için bir geri çağırma fonksiyonu kaydeder.

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

2 — Ek bir int32_t alanı içeren her alınan mesaj için çağrılan bir geri çağırma işlevi kaydeder.

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

3 — Yalnızca adı “mesaj” ile eşleşen alınan mesajlar için çağrılan bir geri çağırma işlevi kaydeder.

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

4 — Yalnızca adı “mesaj” ile eşleşen ve mesaj yükünde ek bir int32_t alanı içeren alınan mesajlar için çağrılan bir geri çağırma işlevi kaydeder.

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

Parameters

Parametre

Tip

Tanım

message

const char*

Eşleştirilecek mesaj adı (dize). Alınan mesajın adı bu değerle eşleştiğinde, callback işlevi çağrılır.

callback

function

EXP Beyni message ile eşleşen bir mesaj aldığında çalışan, önceden tanımlanmış bir fonksiyon.

Return Values

Bu fonksiyon bir değer döndürmez.

Notes
  • received geri çağırma işlemi dört argümanla çağrılıyor:

Callback Signature

callback(message, linkname, index, value)

Argüman

Tanım

message

Alınan mesajın adı (örneğin, “add”).

linkname

Mesajın alındığı bağlantının adı.

index

Mesajla birlikte gönderilen tamsayı değeri (eğer belirtilmişse).

value

Mesajla birlikte gönderilen ondalık sayı değeri (eğer belirtilmişse).

Examples

Robot 1 için Kod

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

Robot 2 için Kod

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

önceki

Mesaj Bağlantısı

sonraki

CTE Çalışma Hücresi

On this page
  • giriiş
  • Sınıf Oluşturucuları
  • Sınıf Yıkıcısı
  • Parametreler
  • Notlar
  • Örnek
  • Üye Fonksiyonları
    • isLinked
    • send
    • receive
    • received
Innovation First, International
​

VEX ve VEX Robotics, Innovation First, Inc.'in ticari markaları veya hizmet markalarıdır. Telif Hakkı ©2026Tüm Hakları Saklıdır. VEX Robotics, Inc., Innovation First International, Inc.'in bir iştirakidir. Diğer tüm ürün adları/markaları, ilgili sahiplerinin mülkiyetindedir. Patentler ve/veya Patent Başvuruları - innovationfirst.com/patents
Site Gizlilik Politikası / Site Kullanım Şartları / Çerez Politikası / Yazılım Gizlilik Politikası

VEX Robotics Facebook sayfasını ziyaret edin. VEX Robotics Twitter sayfasını ziyaret edin. VEX Robotics Instagram sayfasını ziyaret edin. VEX Robotics YouTube sayfasını ziyaret edin.
VEX API Geri Bildirim Formu

Geri bildirimleriniz bizim için çok değerli! VEX API ile ilgili önerilerinizi, övgülerinizi paylaşmak veya hataları bildirmek için bu formu kullanın. Katkılarınız, VEX API dokümantasyonunu geliştirmemize yardımcı oluyor.

​

Teknik sorun yaşıyorsanız veya müşteri desteğine ihtiyacınız varsa lütfen support.vex.com ziyaret edin..

  • Send Happy Feedback
  • Send Sad Feedback

Not: Mevcut URL, mesajınızla birlikte paylaşılacaktır.

E-posta adresinizi ekleyerek, VEX'in geri bildiriminizle ilgili sorularımız olması durumunda size e-posta gönderebileceğini kabul ediyorsunuz.
Gizlilik Politikası >
Lütfen geri bildirimlerinizi paylaşın. Geri bildirim başarıyla gönderildi!
Choose Which VEX IQ Generation to View

VEX IQ (1st gen)

VEX IQ (2nd gen)