【问题标题】:Arduino Serial Communication not receiving entire messageArduino串行通信没有收到整个消息
【发布时间】:2012-10-05 22:42:33
【问题描述】:

我的 Arduino 通信有问题。这很难描述,所以我不能把它放在标题里。无论如何,这里有以下内容:

所以我的接收端有这个代码:

if(Serial1.available())
{
    while(Serial1.available())
    {
        uint8_t inByte = Serial1.read();

        inByte = inByte ^ k;

        Serial.write(inByte); 
    }

    Serial.println(" done");
}

它应该打印在一行中,并在完成后打印完成。 Serial1.available() 好像跳过了下一个Serial1.available(),不知道怎么回事。无论如何,这是我当前的糟糕输出:

h done
e done
l done
l done
o done

done

什么时候应该:

hello done

很抱歉,如果这句话可以更好地表达,但我现在只能输入这些,我的大脑有点疼。我从未在 Windows c++ 控制台应用程序中遇到过这种行为。

【问题讨论】:

    标签: serial-port arduino communication


    【解决方案1】:

    如果您在 loop() 中调用该例程,那么是的,它将从串行缓冲区读取并立即返回,因为您可能发送数据的速度不够快。

    处理这类事情的一个更好的方法是使用一个控制字符来指示消息的结束,或者如果您有一个您希望接收的特定数据格式,那么保留已经进入的字符的计数直到已达到数据格式限制。

    这里有一些您可能会觉得有用的讨论:Serial Duplex using Arduino 还有一些随 Arduino IDE 一起提供的示例草图:菜单:示例:通信:

    另外,请阅读 Serial 列表下的所有条目以了解 Arduino。那里有好东西。

    因此,您为使用串行输入开发的例程实际上取决于您的项目和您接收的数据类型。在上面的示例中,如果您要使用控制字符,它可能如下所示:

     while(Serial1.available()){
       char c = Serial1.read();
    
       if (c == '*'){
           Serial.println(" done");
       } else {
           Serial.write(c); 
       } 
     }
    

    【讨论】:

    • 非常感谢。我仍然是 arduino 等嵌入式系统领域的菜鸟,多年来我一直被大型架构和框架(如 window)所托,我已经忘记了低层次。
    • 是的 - 我有时会因为连续的事情而烦恼 - 比如需要接收大量数据。如果您还没有这样做,请查看arduino.cc/forum 的论坛 - 庞大的社区而且非常友好。干杯。
    猜你喜欢
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 2017-09-01
    • 2022-10-08
    相关资源
    最近更新 更多