2009-08-17 7 views
3

私はMio P550デバイスを持っています。これにはGPSが付属しています。私は、単にSerialPort.Read()を使って、NMEA文を得るためにSerialPortを使用しようとします。データはいくつかの奇妙なエンコーディングで返されます。 GPSはASCIIでNMEA文を返すべきですが、そうではありません。ここで読書のための私のコードは次のとおりです。GPSからNMEA文を読んでください

   dataLength = this.serialPort.Read(buffor, 0, Gps.BUFFOR_LENGTH); 
       Debug.WriteLine("data length: " + dataLength); 

       if (dataLength > 0) 
       { 
        for (int i = 0; i < dataLength; i++) 
        { 
         char c = Convert.ToChar(buffor[i]); 

         if (c == '\r' || c == '\n') 
         { 
          string data = stringBuilder.ToString(); 
          Debug.WriteLine("data readed: " + data); 

          if (data.StartsWith("$GPGGA")) 
          { 
           this.OnLocationChanged(data); 
          } 

          stringBuilder.Length = 0; 
         } 
         else 
         { 
          stringBuilder.Append(c); 
         } 

         Debug.WriteLine("readed data: " + stringBuilder.ToString()); 
        } 

そして、ここでは、私がリターンに入るサンプル値です。xæææxfæ`æxæføøøxxxøx

私はASCIIでNMEAセンテンスを返すも、第二のデバイス(のAsus A636N)を、持っていると私コードは素晴らしい作品です。

NMEA文をASCII形式で取得するにはどうすればよいですか?または、デバイスから返されたデータのエンコードを取得する方法は?私はSystem.Text.Encoding.xxx.GetString()からすべてのクラスを読み込みバイトから文字列を取得しようとしますが、正しいデータを返しません。上記のサンプルと同様のデータを返します。

答えて

7

おそらく、シリアルポートのボーレートがNMEA仕様の必要に応じて4800 baudに設定されていることを確認する必要があります。

+0

ありがとうございます!それがこれだった。 Asusデバイスのすべての機能が、ボーレートをコードに設定せずにうまく動作するのはなぜかと思います。 – GTD

+0

私にとっては、ストップビットを1に設定していないということでした。しかし、あなたは答えてくれました。ありがとう。 – wiggily

関連する問題