我有一个arduino,每隔半秒从串行线上吐出一行GPS数据,我知道这很有效,因为我可以看看arduino IDE中的串行监视器,每隔半秒,一个新的单行数据出现。
我现在正在使用Swift编写Mac程序,它通过串口将每个坐标放在地图上,并使用ORSSerialPort库连接到arduino并接收其数据。这工作正常,我有一个早期工作的基本版本,但是我注意到GPS数据中存在间隙(它们出现在地图上的小组中,当它们应该是它们的常数线时,它们之间有明显的空间)
在我拥有地图之前,我有一个文本字段,当它进入时会添加每个GPS数据线,这产生与arduino IDE串行监视器完全相同的输出,所以我认为一切正常。< / p>
为了尝试修复地图上的问题,我删除了地图代码,只需print()
将每一行输出到XCode IDE中,因为它是通过串口进入的。令我惊讶的是,数据中存在随机换行符,我不明白为什么。我觉得这可能会导致我遇到的问题(在每个逗号分割字符串,所以我可以提取单个值),所以想知道为什么它在arduino IDE和文本字段中作为单行出现,但不是在XCode IDE中,大概是在我使用字符串的时候。
为什么我的单行数据通过多行并且表现得像个别变量(如获取行的最后一个字符会返回三行中第一行的最后一个字符,而不是半冒号)?
答案 0 :(得分:0)
问题不是可能会插入额外的换行符。相反,ORSSerialPort(就像它使用的底层POSIX API)只是在数据进入时向其委托报告数据。它无法知道对于您的特定用例,您只需要完整的行。
您需要缓冲传入的数据,并且只在您收到完整的&#34;行&#34; /数据包时才处理它。 ORSSerialPort包含一个API,ORSSerialPacketDescriptor
使这更容易。这里有关于该API的进一步文档:https://github.com/armadsen/ORSSerialPort/wiki/Packet-Parsing-API
请注意,此API尚不支持仅使用结束分隔符。您需要从头到尾验证整个数据包,因为解析例程是&#34;懒惰&#34;。也就是说,它试图从数据包的末尾开始找到可能的最小匹配。