1

シリアル デバイスと通信するための iPhone アプリを作成しています (RN-XV シリアルから wifi ボードを介して)。現時点での通信プロトコルは非常に基本的なものです。iPhone は 'D' という文字を送信し、シリアル デバイスは ';' で区切られた値の文字列で応答します。LF (\n) で終了します。

現時点では、次のコードを使用して Arduino でシリアル デバイスをシミュレートしています。

if(Serial.available()){
    char ch = Serial.read();
    if(ch == 'D') Serial.println("04.06.2013 16:52:29 ;1090 ;--- ;--- ;--- ;--- ;--- ;--- ;--- ;--- ;--- ;71365 ;--- ;2547 ;2547 ;--- ;1467 ;--- ;--- ;0 ;098 ;- ;--- ;--- ;--- ;--- ;--- ;");
}

送信する文字列は、シリアル デバイスが送信する内容の単なる例です。

iPhone 側では、次のコードで GCDAsyncSocket を使用しています。

ViewController.m で:

- (void)viewDidLoad {
    [super viewDidLoad];
    mySocketConnection = [SocketConnection getInstance];
    [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(askForData) userInfo:nil repeats:YES];
}


- (void) askForData {
    NSData *requestData = [@"D" dataUsingEncoding:NSUTF8StringEncoding];
    [mySocketConnection.myGCDAsocket writeData:requestData withTimeout:-1.0 tag:0];
    [mySocketConnection.myGCDAsocket readDataWithTimeout:-1.0 tag:0];               
}

SocketConnection.m で:

- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag {

    NSString *myString = [NSString stringWithUTF8String:[data bytes]];
    NSLog(@"Stringa: %@", myString);

    NSArray *myArray = [myString componentsSeparatedByString:@";"];
    NSLog(@"count = %d", [myArray count]);
}

問題は、70% で動作することです。

  • ほとんどの場合、受信したデータは正しいです (配列内の 28 個のオブジェクト)

  • 時々何も受け取れない (null)

  • いつか正しい文字列と一緒に、どこから来たのかわからないデータをさらに受け取ります

これは、XCode コンソール ウィンドウの出力の例です。

2013-06-06 00:05:41.767 wakman[2714:907] ホストに接続: 192.168.1.12 ポート:2000

2013-06-06 00:05:43.868 wakman[2714:907] ストリンガ: (null)

2013-06-06 00:05:43.870 wakman[2714:907] カウント = 0

2013-06-06 00:05:45.886 wakman[2714:907] ストリンガ: (null)

2013-06-06 00:05:45.888 wakman[2714:907] カウント = 0

2013-06-06 00:05:47.868 wakman[2714:907] ストリンガ: 04.06.2013 16:52:29 ;1090 ;--- ;--- ;--- ;--- ;--- ;- -- ;--- ;--- ;--- ;71365 ;--- ;2547 ;2547 ;--- ;1467 ;--- ;--- ;0 ;098 ;- ;--- ;- -- ;--- ;--- ;--- ;

2013-06-06 00:05:47.870 wakman[2714:907] カウント = 28

2013-06-06 00:05:49.893 wakman[2714:907] ストリンガ: 04.06.2013 16:52:29 ;1090 ;--- ;--- ;--- ;--- ;--- ;- -- ;--- ;--- ;--- ;71365 ;--- ;2547 ;2547 ;--- ;1467 ;--- ;--- ;0 ;098 ;- ;--- ;- -- ;--- ;--- ;--- ;

;---; =>このデータはどこから来たのですか?

2013-06-06 00:05:49.895 wakman[2714:907] カウント = 30

2013-06-06 00:05:51.892 wakman[2714:907] ストリンガ: 04.06.2013 16:52:29 ;1090 ;--- ;--- ;--- ;--- ;--- ;- -- ;--- ;--- ;--- ;71365 ;--- ;2547 ;2547 ;--- ;1467 ;--- ;--- ;0 ;098 ;- ;--- ;- -- ;--- ;--- ;--- ;

--- ;--- ;--- ;--- ;--- ;--- ;--- ;--- ;--- ;71365 ;--- ;2547 ;2547 ;--- ; 1467 ; --- ; =>このデータはどこから来たのですか?

2013-06-06 00:05:51.894 wakman[2714:907] カウント = 44

2013-06-06 00:05:53.890 wakman[2714:907] ストリンガ: 04.06.2013 16:52:29 ;1090 ;--- ;--- ;--- ;--- ;--- ;- -- ;--- ;--- ;--- ;71365 ;--- ;2547 ;2547 ;--- ;1467 ;--- ;--- ;0 ;098 ;- ;--- ;- -- ;--- ;--- ;--- ;

2013-06-06 00:05:53.892 wakman[2714:907] カウント = 28

2013-06-06 00:05:55.886 wakman[2714:907] ストリンガ: (null)

2013-06-06 00:05:55.888 wakman[2714:907] カウント = 0 => データなし?

私のコードに何か問題がありますか?

ありがとう、コラード

4

0 に答える 0