1

我正在开发一个通过 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 个字节的数据?)

4

1 回答 1

0

Redpark SDK 只抓取传入的串行数据流,但不会(尽管有一些帮助程序)将其解释为数据包。您需要自己编写代码。正如agentatlarge在对您的问题的评论中所建议的那样,将数据读入缓冲区,readBytesAvailable:numBytes直到您获得一个换行符(ASCII 13),此时您可以解析字符串并重新开始。

或者,跳过初始字符串:读取传入数据,直到获得“x”(此时您将字符串添加到 an NSMutableArray换行符(此时您处理数组并开始一个新的。

请注意,使用默认设置(可在 中配置redparkSerial.h)数据将以限制为 100 毫秒 ( rxForwardingTimeout) 或 16 字节 ( rxForwardCount) 的块提供给您,以较早者为准。因此,您的系统将需要能够处理多次读取,直到确定它已接收到数据包(打印行)中的所有数据,新行字符的到来证明了这一点。

于 2013-03-29T08:29:02.573 回答