当前位置:首页Arduino > 正文

arduino读取多个串口

作者:野牛程序员:2024-07-15 14:24:51Arduino阅读 2194
arduino读取多个串口

Arduino 读取多个串口的方法需要使用支持多个硬件串口的板子,例如 Arduino Mega 2560。以下是一个示例代码,展示如何从多个串口读取数据并存储到不同的数组中。

const int bufferSize = 10; // 数组大小

char receivedData1[bufferSize]; // 存储串口1接收到的数据
char receivedData2[bufferSize]; // 存储串口2接收到的数据

int index1 = 0; // 串口1数组索引
int index2 = 0; // 串口2数组索引

void setup() {
  Serial.begin(9600); // 初始化串口0,波特率9600
  Serial1.begin(9600); // 初始化串口1,波特率9600
  Serial2.begin(9600); // 初始化串口2,波特率9600
}

void loop() {
  // 处理串口0的数据
  if (Serial.available() > 0) {
    readSerialData(Serial, receivedData1, index1);
  }
  
  // 处理串口1的数据
  if (Serial1.available() > 0) {
    readSerialData(Serial1, receivedData2, index2);
  }
  
  // 处理串口2的数据
  if (Serial2.available() > 0) {
    // 添加一个新的数组和索引来处理串口2的数据
    static char receivedData3[bufferSize];
    static int index3 = 0;
    readSerialData(Serial2, receivedData3, index3);
  }
}

void readSerialData(HardwareSerial &serial, char *buffer, int &index) {
  while (serial.available() > 0) {
    char incomingByte = serial.read(); // 读取一个字节的数据

    if (incomingByte == '\n') { // 检测到换行符
      buffer[index] = '\0'; // 添加字符串结束符
      serial.println(buffer); // 打印接收到的数据
      index = 0; // 重置索引
    } else {
      if (index < bufferSize - 1) {
        buffer[index] = incomingByte; // 存入数组
        index++;
      } else {
        serial.println("Buffer Overflow"); // 缓冲区溢出
      }
    }
  }
}

此代码示例展示了如何在 Arduino Mega 2560 上同时处理来自三个串口的数据(串口0、串口1和串口2)。每个串口的数据都存储在不同的数组中,并在接收到换行符时打印出来。函数 readSerialData 用于简化从串口读取数据的逻辑。


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

    热门点击