1

redparkケーブルを介してArduinoシリアル出力を読み取るIOSアプリを開発しています。Arduino 側では、Serial.println() を使用して文字列を送信します。文字列は「12.34x334.45x0.34x123x33」の形式です。基本的には、特殊な分割文字として「x」を間に挟んだ double の組み合わせです。私の最初の考えは、アプリ側ではArduinoの出力を1行ずつ取得するので、単に使用することでした

NSString *testString= @"12.34x334.45x0.34x123x33";
NSArray *array = [testString componentsSeparatedByString:@"x"];

NSArray を取得するには、12.34 334.45 0.34 123 および 33 が含まれます。

ここに投稿された質問と回答を読んだ後、redpark sdk が Arduino の出力を 1 行ずつ処理する方法はなく、常に X バイト単位であることがわかりました。

Arduino の出力文字列を正しく解析するには、どうすればよいですか? 元の文字列を固定長で送信するために、double データに先頭と末尾の 0 を追加することは良い考えでしょうか? (つまり、「03.45x45.50x02.30」で 17 バイトにし、redpark sdk を使用して 17 バイトのデータを読み取ろうとしますか?)

4

1 に答える 1

0

Redpark SDK は受信シリアル データ ストリームを取得するだけで、(いくつかのヘルパー ルーチンがあるにもかかわらず) パケットとして解釈しません。自分でコーディングする必要があります。質問へのコメントでagentatlargeが示唆しているように、readBytesAvailable:numBytes改行文字(ASCII 13)を取得するまでデータをバッファに読み込みます。この時点で、文字列を解析して最初からやり直すことができます。

または、最初の文字列をスキップします。「x」(文字列を に追加する時点NSMutableArray)または改行文字 (配列を処理して新しい行を開始する時点) を取得するまで、入力データを読み取ります。

デフォルト設定 ( で構成可能) を使用すると、データは 100 ミリ秒 ( ) または 16 バイト ( ) のいずれか早い方にredparkSerial.h制限されたチャンクで供給されることに注意してください。そのため、改行文字の到着によって証明される、パケット (印刷された行) 内のすべてのデータを確実に受信するまで、システムは複数の読み取りを処理できる必要があります。rxForwardingTimeoutrxForwardCount

于 2013-03-29T08:29:02.573 に答える