如何同时读取两个串口监视器?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),必须分开使用不同的串口对象。
具体修正步骤:
- 统一波特率:把
setup()里的Serial.begin(9600)改成Serial.begin(19200),同时串口监视器也选择19200,保证收发两端参数一致。 - 正确使用多串口:如果使用第二个硬件串口,把
setup1()修改为Serial1.begin(19200),并将loop1()里的Serial.print()/Serial.println()全部替换为Serial1.print()/Serial1.println(),让两个串口各自输出对应传感器的数据,避免互相干扰。 - 优化阻塞问题:代码中的
delay(500)会让程序强制暂停,影响数据读取和串口输出的流畅度,建议改用millis()实现非阻塞延时,避免程序卡顿。
内容的提问来源于stack exchange,提问作者Saif Alzaben
相关产品推荐
相关产品推荐

