You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何同时读取两个串口监视器?19200波特率乱码原因咨询

地下停车场车辆引导系统串口乱码问题

我正在制作类似地下停车场的车辆引导系统,尝试通过两个串口监视器读取两个传感器的数据,代码如下:

const int AnalogInPin1 = A1;
const int AnalogInPin2 = A2;
int SerialPrint = 0;
int SerialMonitor = 0;

void setup() {
  Serial.begin(9600);

}

void loop() {
  SerialPrint = analogRead(AnalogInPin1);
  Serial.print("Sensor = ");
  Serial.println(SerialPrint);

  if (SerialPrint > 400) {
   digitalWrite(3, LOW);
   digitalWrite(4, HIGH); 
   delay(500);
  }

  else{
   digitalWrite(4, HIGH); 
   digitalWrite(3, LOW); 
   delay(500);
  }
}

void setup1() {
    Serial.begin();

}

void loop1() {
  SerialMonitor = analogRead(AnalogInPin2);
  Serial.print("Sensor = ");
  Serial.println(SerialMonitor);

  if (SerialMonitor > 400) {
   digitalWrite(6, LOW);
   digitalWrite(5, HIGH);
   delay(500);
  }

  else{
   digitalWrite(5, HIGH);
   digitalWrite(6, LOW);
   delay(500);
  }
}

遇到的问题:使用19200波特率时,串口监视器循环显示乱码“f�������x怘�f�������x怘”,但使用9600波特率时无此现象,请问这是什么原因?


问题原因与解决办法

  • 波特率不匹配:代码里setup()把串口波特率固定设为9600,但串口监视器选了19200,收发两端波特率不一致,这是串口乱码最核心的原因——串口通讯要求两端的波特率、数据位、停止位、校验位完全一致,波特率错误会导致接收端无法正确解析数据,直接输出乱码。

  • 多串口使用错误:你写了setup1()和loop1()来处理第二个传感器,但第二个串口初始化用的是Serial.begin()(还未指定波特率),而且两个循环都用Serial.print()往同一个串口输出数据,两个传感器的数据流混在一起发送,也会引发乱码。如果你的板子支持多硬件串口(比如Arduino Mega的Serial1/Serial2),必须分开使用不同的串口对象。

具体修正步骤:

  1. 统一波特率:把setup()里的Serial.begin(9600)改成Serial.begin(19200),同时串口监视器也选择19200,保证收发两端参数一致。
  2. 正确使用多串口:如果使用第二个硬件串口,把setup1()修改为Serial1.begin(19200),并将loop1()里的Serial.print()/Serial.println()全部替换为Serial1.print()/Serial1.println(),让两个串口各自输出对应传感器的数据,避免互相干扰。
  3. 优化阻塞问题:代码中的delay(500)会让程序强制暂停,影响数据读取和串口输出的流畅度,建议改用millis()实现非阻塞延时,避免程序卡顿。

内容的提问来源于stack exchange,提问作者Saif Alzaben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 16:40:34