Serial port Arduino到Arduino通过串行
我希望通过可用的UART端口将串行数据从Arduino Uno发送到Arduino Nano 在Nano端接收数据时,我必须检查数据是否与“a”或“b”匹配。如果有,我必须把数据送回联合国办事处 我在Nano端使用了以下代码:Serial port Arduino到Arduino通过串行,serial-port,arduino,uart,Serial Port,Arduino,Uart,我希望通过可用的UART端口将串行数据从Arduino Uno发送到Arduino Nano 在Nano端接收数据时,我必须检查数据是否与“a”或“b”匹配。如果有,我必须把数据送回联合国办事处 我在Nano端使用了以下代码: void GMP_OutputSerial(void) { if(Serial.available()) // Check if serial data is avaiable
void GMP_OutputSerial(void)
{
if(Serial.available()) // Check if serial data is avaiable
{
unSerialAvailable = Serial.read(); // Read the data if serial data is available
if(unSerialAvailable == 'A' || unSerialAvailable == 'B' || unSerialAvailable == 'a' || unSerialAvailable == 'b') // Proceed only if available data is equal to A or B
{
/*
if(g_stSensorParms.stAppParms.unFinalDistance > 80 || g_stSensorParms.stAppParms.unFinalDistance < 0)
{
Serial.println("Distance: Out of range");
}
else
{
*/
Serial.print("Distance: "); // Output Distance text on the serial monitor
Serial.println(g_stSensorParms.stAppParms.unFinalDistance); // Output the actual distance on the serial monitor
}
}
}
然而,我看不到任何交流。两块板的电源均来自外部电源=5V
Uno的TX线连接到Nano的RX线,反之亦然
我做错了什么?在Serial.write(a)中代码>,a
等于“a”?或者你真的是指Serial.write('A')
p、 实际上,通过连接1ft,您可以为串行端口制作廉价的“嗅探器”。电缆连接至DB9连接器,插入COM端口(或USB连接至串行适配器),并“查看”arduino RX\TX线路上的实际数据。serial.write(a)代码>,a
等于“a”?或者你真的是指Serial.write('A')
p、 实际上,通过连接1ft,您可以为串行端口制作廉价的“嗅探器”。电缆连接到DB9连接器,插入COM端口(或USB连接到串行适配器),并“查看”arduino RX\TX线路上的实际数据。您是否在每个板的设置功能中设置了串行.begin(9600)?
如果你在UNO上发布核心运行信息也会有所帮助。
或者至少确认你已经验证了它的工作原理,比如用PC替换Nano,就像OP写的那样。
UNO在TX和RX线路上都有发光二极管,因此如果您使用的是“真实”串行端口,您可以轻松验证是否传输了任何内容。
arduino ide还提供了集成的、易于使用的串行嗅探器。您是否在每个板的设置功能中都添加了serial.begin(9600)?
如果你在UNO上发布核心运行信息也会有所帮助。
或者至少确认你已经验证了它的工作原理,比如用PC替换Nano,就像OP写的那样。
UNO在TX和RX线路上都有发光二极管,因此如果您使用的是“真实”串行端口,您可以轻松验证是否传输了任何内容。
arduino ide还带有集成的、易于使用的串行嗅探器。请声明char a='a'
,然后按如下方式编写
char a='A';
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.write(a);
delay(10);
}
请声明chara='a'
,然后按如下方式编写
char a='A';
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.write(a);
delay(10);
}
来自Arduino UNO
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.print("a");
}
void setup()
{
Serial.begin(9600);
if(Serial.available()>0)
{
char a = Serial.read();
}
}
来自Arduino NANO
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.print("a");
}
void setup()
{
Serial.begin(9600);
if(Serial.available()>0)
{
char a = Serial.read();
}
}
来自Arduino UNO
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.print("a");
}
void setup()
{
Serial.begin(9600);
if(Serial.available()>0)
{
char a = Serial.read();
}
}
来自Arduino NANO
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.print("a");
}
void setup()
{
Serial.begin(9600);
if(Serial.available()>0)
{
char a = Serial.read();
}
}
上述代码应正常工作,
我建议您在尝试传输时为字符串创建一些校验和,因为两块板之间的串行连接对于大量数据来说不够稳定。上述代码应能正常工作,
我建议您在尝试传输时为字符串创建一些校验和,因为两块板之间的串行连接对于大量数据来说不够稳定。在上载脚本之前,只需删除RX TX连接,在上载成功后,重新连接并再次检查。
此时设置数据速率并不重要,因为即使两个芯片之间的数据速率不匹配(这很可能发生),您将得到的错误是数据失真,因此,在上传脚本之前,您将进行传输,但不会以您想要的方式进行传输,只需删除RX-TX连接,在上传成功后,重新连接并再次切换即可。
此时设置数据速率并不重要,因为即使两个芯片之间的数据速率不匹配(这很可能发生),您将得到的错误是扭曲的数据,因此您将进行传输,但不会以您想要的方式进行传输。“我看不到任何通信发生。”--您可能只是说您没有看到预期数据的接收。“通信”包括传输和接收。您可能还没有检查传输。您可以在Uno'x TxD pin上使用“示波器”,或者按照@Keroronsk的建议嗅探端口。“我看不到任何通信发生。”--您可能只是说没有看到预期数据的接收。“通信”包括传输和接收。您可能还没有检查传输。您可以在Uno'x TxD pin上使用“scope”,或者按照@Keroronsk的建议嗅探端口。这实际上是一个注释,而不是答案。再加上一点代表性,这实际上是一个评论,而不是一个答案。再重复一点。