应该是单行的ORSSerialPort数据通过多行

时间:2016-10-24 19:54:18

标签: swift orsserialport

我有一个arduino,每隔半秒从串行线上吐出一行GPS数据,我知道这很有效,因为我可以看看arduino IDE中的串行监视器,每隔半秒,一个新的单行数据出现。

我现在正在使用Swift编写Mac程序,它通过串口将每个坐标放在地图上,并使用ORSSerialPort库连接到arduino并接收其数据。这工作正常,我有一个早期工作的基本版本,但是我注意到GPS数据中存在间隙(它们出现在地图上的小组中,当它们应该是它们的常数线时,它们之间有明显的空间)

在我拥有地图之前,我有一个文本字段,当它进入时会添加每个GPS数据线,这产生与arduino IDE串行监视器完全相同的输出,所以我认为一切正常。< / p>

为了尝试修复地图上的问题,我删除了地图代码,只需print()将每一行输出到XCode IDE中,因为它是通过串口进入的。令我惊讶的是,数据中存在随机换行符,我不明白为什么。我觉得这可能会导致我遇到的问题(在每个逗号分割字符串,所以我可以提取单个值),所以想知道为什么它在arduino IDE和文本字段中作为单行出现,但不是在XCode IDE中,大概是在我使用字符串的时候。

编辑:我将打印前缀为XCode IDE,输出到文本字段,带有五个加号,后缀为五个破折号,然后在发送单个报表后将串口设置为关闭(应该是单行数据) )。我得到的两个输出结果最终是三行,每行前缀并加上加号和短划线。请参见下面的照片,其中显示了应该是一行的内容:

为什么我的单行数据通过多行并且表现得像个别变量(如获取行的最后一个字符会返回三行中第一行的最后一个字符,而不是半冒号)?

1 个答案:

答案 0 :(得分:0)

问题不是可能会插入额外的换行符。相反,ORSSerialPort(就像它使用的底层POSIX API)只是在数据进入时向其委托报告数据。它无法知道对于您的特定用例,您只需要完整的行。

您需要缓冲传入的数据,并且只在您收到完整的&#34;行&#34; /数据包时才处理它。 ORSSerialPort包含一个API,ORSSerialPacketDescriptor使这更容易。这里有关于该API的进一步文档:https://github.com/armadsen/ORSSerialPort/wiki/Packet-Parsing-API

请注意,此API尚不支持仅使用结束分隔符。您需要从头到尾验证整个数据包,因为解析例程是&#34;懒惰&#34;。也就是说,它试图从数据包的末尾开始找到可能的最小匹配。