我正在开发一个通过redpark电缆读取Arduino串行输出的IOS应用程序。 在Arduino方面,它使用Serial.println()发送字符串。 该字符串的格式为“12.34x334.45x0.34x123x33”。基本上它是两个组合,两者之间的“x”作为一个特殊的分裂角色。 我最初的想法是,在应用程序方面,它将逐行获得Arduino输出,所以我只会使用
NSString *testString= @"12.34x334.45x0.34x123x33";
NSArray *array = [testString componentsSeparatedByString:@"x"];
获得NSArray包含12.34 334.45 0.34 123和33。
在阅读了这里发布的问题和答案之后,我发现redpark sdk无法逐行处理Arduino输出,它总是以X字节为基础。
为了正确解析Arduino输出字符串,我该怎么办?将前导和拖尾0添加到我的双数据中以使原始字符串以固定长度发送是不是一个好主意? (即“03.45x45.50x02.30”使其为17个字节,并尝试使用redpark sdk读取17个字节的数据?)
答案 0 :(得分:0)
Redpark SDK只捕获传入的串行数据流,但不会(尽管有一些辅助例程)将其解释为数据包。你需要自己编写代码。正如您对问题的注释中的agentatlarge所建议的那样,使用readBytesAvailable:numBytes
将数据读入缓冲区,直到您获得一个新的行字符(ASCII 13),此时您要解析字符串并重新开始。< / p>
或者,跳过初始字符串:读取传入的数据,直到得到“x”(此时将字符串添加到NSMutableArray
)或换行符号(此时你处理数组并开始一个新数组。
请注意,使用默认设置(可在redparkSerial.h
中配置)数据将以限制为100毫秒(rxForwardingTimeout
)或16字节(rxForwardCount
)的块的形式提供给您,具体取决于来得更快因此,您的系统需要能够处理多次读取,直到确定它已收到数据包(打印行)中的所有数据,这可以通过新行字符的到达来证明。