Mega multiple serial test 多重串行测试

这段代码是一个Arduino示例程序,用于在Arduino Mega开发板上实现多个串行端口之间的数据转发。Arduino Mega具有多个串行端口(SerialSerial1Serial2Serial3),这段代码主要使用了Serial(主串行端口)和Serial1(第一个额外的串行端口)。它适用于需要在多个串行设备之间进行通信的场景,例如连接多个传感器或其他串行设备。通过这种方式,可以方便地实现数据的中转和交互。

/*
  Mega multple serial test

 Receives from the main serial port, sends to the others.
 Receives from serial port 1, sends to the main serial (Serial 0).

 This example works only on the Arduino Mega

 The circuit:
 * Any serial device attached to Serial port 1
 * Serial monitor open on Serial port 0:

 created 30 Dec. 2008
 modified 20 May 2012
 by Tom Igoe & Jed Roach

 This example code is in the public domain.

 */


void setup() {
  // initialize both serial ports:
  Serial.begin(9600);
  Serial1.begin(9600);
}

void loop() {
  // read from port 1, send to port 0:
  if (Serial1.available()) {
    int inByte = Serial1.read();
    Serial.write(inByte);
  }

  // read from port 0, send to port 1:
  if (Serial.available()) {
    int inByte = Serial.read();
    Serial1.write(inByte);
  }
}

功能概述

硬件部分

  • 任何串行设备连接到Arduino Mega的Serial1端口。

  • 使用Arduino IDE的串行监视器与Serial(主串行端口)通信。

软件部分

  • Serial1读取数据并发送到Serial

  • Serial读取数据并发送到Serial1

  • 实现两个串行端口之间的双向数据转发。

代码逐行解释

setup() 函数

void setup() {
  // 初始化两个串行端口,波特率为9600
  Serial.begin(9600);
  Serial1.begin(9600);
}
  • Serial.begin(9600):初始化主串行端口(Serial),波特率为9600。

  • Serial1.begin(9600):初始化第一个额外的串行端口(Serial1),波特率为9600。

loop() 函数

void loop() {
  // 从Serial1读取数据并发送到Serial
  if (Serial1.available()) {
    int inByte = Serial1.read();
    Serial.write(inByte);
  }

  // 从Serial读取数据并发送到Serial1
  if (Serial.available()) {
    int inByte = Serial.read();
    Serial1.write(inByte);
  }
}

Serial1读取数据并发送到Serial

  • if (Serial1.available()):检查Serial1端口是否有数据可用。

  • int inByte = Serial1.read():从Serial1读取一个字节的数据。

  • Serial.write(inByte):将读取的数据发送到Serial端口。

Serial读取数据并发送到Serial1

  • if (Serial.available()):检查Serial端口是否有数据可用。

  • int inByte = Serial.read():从Serial读取一个字节的数据。

  • Serial1.write(inByte):将读取的数据发送到Serial1端口。

工作原理

初始化串行端口: 在setup()函数中,初始化SerialSerial1两个串行端口,波特率均设置为9600。

数据转发

  • loop()函数中,程序不断检查两个串行端口是否有数据可用。

  • 如果Serial1有数据可用,读取数据并将其发送到Serial

  • 如果Serial有数据可用,读取数据并将其发送到Serial1

双向通信: 这种方式实现了两个串行端口之间的双向数据转发,即从Serial1Serial和从SerialSerial1

注意事项

硬件连接

  • 确保连接到Serial1的设备的波特率与代码中设置的波特率一致(9600)。

  • 使用Arduino IDE的串行监视器与Serial端口通信时,波特率也应设置为9600。

适用性

  • 这段代码仅适用于Arduino Mega开发板,因为其他Arduino板子(如Uno、Nano等)只有一个串行端口。

视频讲解

BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)