Arduino到Arduino Via Serial

时间:2013-08-28 07:26:55

标签: serial-port arduino uart

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

我做错了什么?

6 个答案:

答案 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连接,上传成功后重新连接它们并重新连接。 此时设置数据速率并不重要,因为即使两个芯片之间的数据速率不匹配(最有可能发生),您将得到的错误是数据失真,因此您将进行传输而不是你想要的方式