0

我希望通过可用的 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 线,反之亦然。

我究竟做错了什么?

4

6 回答 6

3

Serial.write(a);中,a是否等于“A”?或者你真的是这个意思Serial.write('A')

ps您实际上可以通过接线1英尺来为串行端口制作便宜的“嗅探器”。将电缆连接到 DB9 连接器,插入 COM 端口(或 USB 到串行适配器),并“查看”arduino RX\TX 线上的实际数据。

于 2013-08-28T07:57:41.927 回答
1

来自 Arduino UNO

void setup()
{
   Serial.begin(9600);
}
void loop()
{
Serial.print("a");
}

来自 Arduino 纳米

void setup()
{
Serial.begin(9600);
if(Serial.available()>0)
{
char a = Serial.read();
}
}
于 2016-07-02T09:18:40.330 回答
0

您是否在每个板的设置功能中放置了 Serial.begin(9600) ?如果您发布在 UNO 上运行的核心,也会有所帮助。或者至少确认您已经验证它可以工作,例如用 PC 替换 Nano,就像 OP 写的那样。UNO 在 TX 和 RX 线上都有 LED,因此如果您使用的是“真实”串行端口,您可以轻松验证是否有任何传输。arduino ide 还带有集成的、易于使用的串行嗅探器。

于 2015-01-14T08:54:02.430 回答
0

在上传脚本之前,只需删除 RX TX 连接,上传成功后重新连接它们并再次检查。此时设置数据速率并不重要,因为即使两个芯片之间的数据速率不匹配(这很可能发生),您将得到的错误是数据失真,因此您将有传输但不在你想要的方式

于 2016-09-14T21:03:43.133 回答
0

上面提到的代码应该可以正常工作,我建议您在尝试传输时为您的字符串创建一些校验和,因为两个板之间的串行连接对于大量数据来说不够稳定。

于 2016-08-07T13:01:22.190 回答
0

请声明char a='A'然后像下面这样写。

char a='A';
void setup() 
{

    Serial.begin(9600);

}

void loop() 
{

     Serial.write(a);
     delay(10);
}
于 2016-01-27T17:09:48.963 回答