当前位置:首页Arduino > 正文

Arduino多串口通信分离字符串最简单有效的方法

作者:野牛程序员:2023-07-29 18:34:57Arduino阅读 3095

在Arduino中进行多串口通信,并分离接收到的字符串,可以使用以下简单有效的方法:

  1. 使用多个HardwareSerial对象:Arduino板上通常有一个硬件串口(Serial),但可以使用SoftwareSerial库来模拟额外的软件串口。可以通过定义多个HardwareSerialSoftwareSerial对象,每个对象分别与一个串口相连。

    #include <SoftwareSerial.h>
    
    // 定义串口对象
    SoftwareSerial mySerial1(10, 11);  // RX, TX for SoftwareSerial1
    SoftwareSerial mySerial2(8, 9);    // RX, TX for SoftwareSerial2
    
    void setup() {
      Serial.begin(9600);      // 与串口监视器通信
      mySerial1.begin(9600);   // 与外部设备1通信
      mySerial2.begin(9600);   // 与外部设备2通信
    }
    
    void loop() {
      // 处理串口1的数据
      if (mySerial1.available()) {
        String receivedData = mySerial1.readStringUntil('\\n');
        // 在这里处理接收到的数据
        Serial.print("Received from Serial1: ");
        Serial.println(receivedData);
      }
    
      // 处理串口2的数据
      if (mySerial2.available()) {
        String receivedData = mySerial2.readStringUntil('\\n');
        // 在这里处理接收到的数据
        Serial.print("Received from Serial2: ");
        Serial.println(receivedData);
      }
    }

    在此示例中,使用了两个SoftwareSerial对象,分别命名为mySerial1mySerial2,并分别连接到Arduino的数字引脚10、11和8、9上。然后,在loop()函数中不断检查每个串口的数据是否可用,并使用readStringUntil('\\n')函数读取每行数据,然后对数据进行处理。

  2. 使用分隔符进行字符串分离:如果在一个串口上接收多个数据,每个数据之间使用特定的分隔符,那么你可以使用strtok()函数来将字符串分离成多个子字符串。

    char receivedData[50]; // 存储接收到的数据
    
    void setup() {
      Serial.begin(9600); // 与串口监视器通信
    }
    
    void loop() {
      // 处理串口数据
      if (Serial.available()) {
        // 读取串口数据并存储到receivedData中
        int bytesRead = Serial.readBytesUntil('\\n', receivedData, sizeof(receivedData) - 1);
        receivedData[bytesRead] = '\\0'; // 添加字符串结束符
    
        // 使用strtok()函数分离数据
        char* token = strtok(receivedData, ",");
        while (token != NULL) {
          // 在这里处理分离出的子字符串
          Serial.print("Received: ");
          Serial.println(token);
          token = strtok(NULL, ",");
        }
      }
    }

    在此示例中,使用strtok()函数将接收到的字符串按逗号分隔成多个子字符串,并逐个处理这些子字符串。

以上两种方法都是比较简单有效的方式,在项目中选择其中一种适合需求即可。注意在处理字符串时,要注意缓冲区溢出和数据解析的安全性。


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击