从Arduino读取串行数据

时间:2011-12-11 22:18:05

标签: java serial-port arduino

我正在尝试使用Java从我的Arduino读取串行数据。我已按照教程 Arduino and Java

到目前为止,我有它工作,除了,我不是一次读取整个串行数据。例如,Arduino应该发送0.71,我读入0然后是.71或其他组合。有时我会很好地阅读它,但通常情况下,数据会被分解。

我有一种预感,如果我将发送的数据类型更改为一个字节,我的程序就可以了,但是我需要在我传输的数据中使用float精度。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

串行协议(例如用于串行USB的串行协议)是面向字节的,而不是面向分组的。因此,无法保证读取将返回由另一端发送的整个“消息”,或者只是您正在观察的一部分,因为没有消息或数据包的概念。

相反,您需要以某种方式界定消息 - 例如通过附加换行符 - 或预先发送带有长度字段的消息,这样您就知道要读取多少字节。

答案 1 :(得分:0)

我这样做是为了让我的Arduino发送'帧',由'间隙'分隔。从串行端口读取数据很容易配置超时(至少在Perl中)。所以我所做的是:

  • 允许在数据帧期间读取数据加上额外的几毫秒:

    [ (number of bytes) × 10 bits × 1000 ms / (baud rate) ] + 100 milliseconds

  • 然后发送的两个值或帧之间的差距应该比这个值长。

  • 由于战略优势,该程序可以轻松地与数据流同步。
  • 我还在数据中添加了一个简单的前导码来检查数据的完整性。
相关问题