我正在尝试使用Java从我的Arduino读取串行数据。我已按照教程 Arduino and Java 。
到目前为止,我有它工作,除了,我不是一次读取整个串行数据。例如,Arduino应该发送0.71,我读入0然后是.71或其他组合。有时我会很好地阅读它,但通常情况下,数据会被分解。
我有一种预感,如果我将发送的数据类型更改为一个字节,我的程序就可以了,但是我需要在我传输的数据中使用float精度。我该如何解决这个问题?
答案 0 :(得分:2)
串行协议(例如用于串行USB的串行协议)是面向字节的,而不是面向分组的。因此,无法保证读取将返回由另一端发送的整个“消息”,或者只是您正在观察的一部分,因为没有消息或数据包的概念。
相反,您需要以某种方式界定消息 - 例如通过附加换行符 - 或预先发送带有长度字段的消息,这样您就知道要读取多少字节。
答案 1 :(得分:0)
我这样做是为了让我的Arduino发送'帧',由'间隙'分隔。从串行端口读取数据很容易配置超时(至少在Perl中)。所以我所做的是:
允许在数据帧期间读取数据加上额外的几毫秒:
[ (number of bytes) × 10 bits × 1000 ms / (baud rate) ] + 100 milliseconds
然后发送的两个值或帧之间的差距应该比这个值长。