Java 从Arduino读取串行数据
我正在尝试使用Java从我的Arduino读取串行数据。我遵循了教程 到目前为止,我已经让它工作了,除了,我没有一次读取全部串行数据。例如,Arduino应该发送0.71,我读取的是0,然后是a.71或其他组合。有时我读得很好,但更多的时候,数据被分解了Java 从Arduino读取串行数据,java,serial-port,arduino,Java,Serial Port,Arduino,我正在尝试使用Java从我的Arduino读取串行数据。我遵循了教程 到目前为止,我已经让它工作了,除了,我没有一次读取全部串行数据。例如,Arduino应该发送0.71,我读取的是0,然后是a.71或其他组合。有时我读得很好,但更多的时候,数据被分解了 我有一种预感,如果我将发送的数据类型更改为一个字节,我的程序就可以了,但是我需要传输数据的浮点精度。如何解决此问题?串行协议(如用于USB串行传输的协议)是面向字节的,而不是面向数据包的。因此,正如您所观察到的,无法保证读操作会返回另一端发送的
我有一种预感,如果我将发送的数据类型更改为一个字节,我的程序就可以了,但是我需要传输数据的浮点精度。如何解决此问题?串行协议(如用于USB串行传输的协议)是面向字节的,而不是面向数据包的。因此,正如您所观察到的,无法保证读操作会返回另一端发送的整个“消息”,或者只是其中的一部分,因为没有消息或数据包的概念
相反,您需要以某种方式对消息进行分隔,例如通过添加换行符或使用长度字段预结束消息,以便您知道要读取多少字节。我通过让Arduino发送“帧”,并用“间隔”分隔。配置从串行端口读取数据的超时(至少在Perl中是这样)很容易。所以我要做的是:
- 允许在数据帧持续时间加上额外的几毫秒期间读取数据:
[(字节数)×10位×1000毫秒/(波特率)]+100毫秒
- 然后发送的两个值或帧之间的间隔应大于此值
- 由于策略性超时,程序很容易与数据流同步
- 我还在数据中添加了一个简单的前导,以检查数据的完整性