2009-08-17 9 views
3

J'ai un appareil Mio P550, qui a un GPS inclus. J'essaie d'utiliser SerialPort pour obtenir des phrases NMEA, en utilisant simplement SerialPort.Read(). Les données sont renvoyées dans un codage bizarre. Le GPS devrait renvoyer des phrases NMEA en ASCII, mais ce n'est pas le cas. Voici mon code pour la lecture:lire des phrases NMEA de GPS

   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()); 
        } 

Et voici la valeur échantillon je reçois en retour: xæææxfæ`æxæføøøxxxøx

Je possède également un second dispositif (Asus A636N), qui renvoient des phrases NMEA en ASCII et mon le code fonctionne très bien.

Qu'est-ce que j'ai à faire avec un périphérique Mio pour obtenir des phrases NMEA en ASCII? Ou comment je peux obtenir l'encodage pour les données retournées par l'appareil? J'essaie d'utiliser toutes les classes de System.Text.Encoding.xxx.GetString() pour obtenir la chaîne à partir des octets lus mais il ne renvoie pas de données correctes - il renvoie des données similaires à l'exemple ci-dessus.

Répondre

7

Vous devez probablement vous assurer que le débit en bauds de votre port série est défini sur 4800 baud comme requis par la spécification NMEA.

+0

Merci! C'était ça. Je me demande maintenant pourquoi tout sur l'appareil Asus fonctionne très bien sans régler le débit en bauds dans le code. – GTD

+0

Pour moi c'était que je n'avais pas mis les bits d'arrêt à 1. Mais votre réponse m'a donné l'idée de vérifier aussi. Merci. – wiggily