我希望通过可用的UART端口将Arduino Uno的串行数据发送到Arduino Nano。
在Nano端接收数据时,我必须检查数据是否与“a”或“b”匹配。如果是,我必须将数据发送回Uno。
我在Nano方面使用了以下代码:
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
}
}
}
在Uno方面:
void loop()
{
Serial.write(a);
delay(1);
}
但是,我看不到任何沟通。两块板的电源来自外部电源= 5V。
Uno的TX线连接到Nano的RX线,反之亦然。
我做错了什么?
答案 0 :(得分:3)
在Serial.write(a);
中,a
等于'A'?或者你的意思是Serial.write('A')
?
P.S。实际上你可以通过1英尺的线路为串口制作便宜的“嗅探器”。连接到DB9连接器,插入COM端口(或USB转串口适配器),并“查看”arduino RX \ TX线路上的实际数据。
答案 1 :(得分:1)
来自Arduino UNO
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.print("a");
}
来自Arduino NANO
void setup()
{
Serial.begin(9600);
if(Serial.available()>0)
{
char a = Serial.read();
}
}
答案 2 :(得分:0)
您是否在每个主板的设置功能中放置了Serial.begin(9600)? 如果您在UNO上发布核心运行它也会有所帮助。 或者至少确认您已经确认它有效,例如用PC替换Nano,就像OP写的那样。 UNO在TX和RX线上都有LED,因此如果使用“真正的”串行端口,您可以轻松验证是否有任何传输。 arduino ide还带有易于使用的集成式嗅探器。
答案 3 :(得分:0)
请声明char a='A'
然后如下所示编写。
char a='A';
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.write(a);
delay(10);
}
答案 4 :(得分:0)
上述代码应该正常运行, 我建议您在尝试传输时为字符串创建一些校验和,因为两块板之间的串行连接对于大量数据来说不够稳定。
答案 5 :(得分:0)
在上传脚本之前,只需删除RX TX连接,上传成功后重新连接它们并重新连接。 此时设置数据速率并不重要,因为即使两个芯片之间的数据速率不匹配(最有可能发生),您将得到的错误是数据失真,因此您将进行传输而不是你想要的方式