【问题标题】:Arduino to Arduino Via SerialArduino 到 Arduino 通过串行
【发布时间】:2013-08-28 07:26:55
【问题描述】:

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

我做错了什么?

【问题讨论】:

  • “我看不到任何通信发生。” -- 您可能只是表示您没有看到预期数据的接收。 “通信”包括传输和接收。您可能还没有检查传输。您可以在 Uno'x TxD 引脚上使用“示波器”,或者按照@Keroronsk 的建议嗅探端口。

标签: serial-port arduino uart


【解决方案1】:

Serial.write(a); 中,a 等于“A”?或者你真的是说Serial.write('A')

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

【讨论】:

    【解决方案2】:

    来自 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();
    }
    }
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        char a='A';
        void setup() 
        {
        
            Serial.begin(9600);
        
        }
        
        void loop() 
        {
        
             Serial.write(a);
             delay(10);
        }
        

        【讨论】:

          【解决方案5】:

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

          【讨论】:

          【解决方案6】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-04-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多