Décoder un code nmea envoyer par un gps (à l'aide mscomm - rs232)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 23 972 fois - Téléchargée 36 fois

Contenu du snippet

Suite d'une demande d'un ami de Vbfrance....
Ce code permet de décoder les phrases reçues par le GPS. Les phrases sont sous forme de code NMEA (faut programmer votre GPS sur mode NMEA).
On utilise le composant Mscomm de Microsoft qui nous permet d'acquise les informations du GPS par le port RS232.

Source / Exemple :


Private Sub Form_Load()
' faut pas oubliez le paramétrage de Mscomm suivant le GPS utiliser
' comme les propriétés MSComm1.CommPort = 1 : Mscomm1.Settings ="4800,n,8,1"

      MSComm1.PortOpen = True 'ouvrir le port, dans mon cas le port numéro 1
      Timer1.Interval = 2000

'Ici je donne la valeur 2000 pour l'intervalle  car les satellites envoient
'les phrases qui contient les informations chaque deux secondes,
'alors gardez cette valeur!!!
End Sub

Private Sub Timer1_Timer()
   decoder  ' on appel cette procédure chaque 2 secondes
End Sub

Public Sub decoder()
Dim TmpChaine As String
Dim i As Integer

   On Error Resume Next
   
TmpChaine = MSComm1.Input ' reçois les phrases envoyer par les satellites

i = InStr(TmpChaine, "GPRMC") ' chercher le départ de la phrase qui nous intéresse

Do While Len(TmpChaine) - i < 61 'Vérifier si la phrase n'arrive pas à la fin
    On Error Resume Next

    TmpChaine = TmpChaine & MSComm1.Input ' stocker la phrase

Loop

' traiter la phrase et extrait les informations avec la fonction mid
Label1.Caption = Mid(TmpChaine, i + 6, 2) & ":" & Mid(TmpChaine, i + 8, 2) & ":" & Mid(TmpChaine, i + 10, 2)
Label2.Caption = "N " & Mid(TmpChaine, i + 15, 2) & "°" & Mid(TmpChaine, i + 17, 2) & "." & Mid(TmpChaine, i + 20, 2) & "'"
Label3.Caption = "E " & Mid(TmpChaine, i + 25, 3) & "°" & Mid(TmpChaine, i + 28, 2) & "." & Mid(TmpChaine, i + 31, 2) & "'"
Label4.Caption = Mid(TmpChaine, i + 48, 2) & "/" & Mid(TmpChaine, i + 50, 2) & "/" & Mid(TmpChaine, i + 52, 2)

'exemple:
'$GPRMC,022804.19,A,3301.5767,S,07131.1408,W,08.5,061.8,040101,06.,E*68
'label1 contient l'heure (Time): hh:mm:ss
'label2 contient la position par rapport au Nord : N ...°...'
'Label3 contient la position par rapport au East : E...°...'
'label4 contient Date : JJ/MM/AA
'il y a des autres informations dans cette phrase a traiter...
End Sub

Conclusion :


Je sais qu'il existe des autres solutions, mais celle là très simple et marche bien :-).
Personnellement, j'utilise une autre méthode avec mon logiciel sur le GPS.

A voir également

Ajouter un commentaire

Commentaires

Milamber51
Messages postés
1
Date d'inscription
mardi 23 juin 2009
Statut
Membre
Dernière intervention
30 juin 2009
-
Bonjour je sais que le sujet date de 4ans mais avec un peu de chance on me répondra peut être.
Alors voilà je dois développer une application dont une partie est de récupérer les données GPS et de les traiter et ce code m'a aidé à comprendre comment il fallait faire, mais voilà j'ai pour contrainte de ne pas utiliser de timer mais plutôt de traiter les données au fur et à mesure qu'elles arrivent car en effet les GPS (dans mon cas un garmin) envoie les données en continue.
Je pense qu'il faut utiliser la commande comEvReceive mais j'ai du mal à le mettre en application.
Quelqu'un serait en mesure de m'aider?
Merci d'avance.
bondex86
Messages postés
2
Date d'inscription
vendredi 7 octobre 2005
Statut
Membre
Dernière intervention
23 novembre 2005
-
bonjour moi j'ai un projet sur le gps et je dois trouver le code nmea pour decoder les infos si vous pouvez me le donner ou me donner des informations le concernant
merci d'avance
cs_kortex
Messages postés
2
Date d'inscription
vendredi 28 avril 2000
Statut
Membre
Dernière intervention
22 août 2005
-
j'ai fait un code similaire avec une carte en 2d et je suis en train de faire un passage en vrai 3d (pas une simple carte 2d avec un angle de 75°) pour info ceux qui veulent réaliser ça et sans faire de spam chez www.radiospares.fr le recepteur serie gps35 390-3823 fait parfaitement l'affaire il fonctionne aussi avec autoroute express et ne coute que 149? pour du gps c'est honete...
cs_mak10
Messages postés
18
Date d'inscription
mercredi 19 février 2003
Statut
Membre
Dernière intervention
3 novembre 2006
-
bjr
pour le code ca marcherait tres bein avec un port serie et un gps serie, mais personnellement je ne sais pas comment traiter avce une entrée USB,cherches un peu du coté utilisation d'un port usb en vb, sinon au moins avec un gps serie tu aura la lecture directe des entrées et parfois la seul chose pour que ca soit correct a lire c'est de changer le mode text ou binaire du type de la lecture!!
mais la deja regardes un peu pour l'utilisation du port usb en vb!!
.pour le programme c'est pas la peine d'ouvrir le port quand on appuis sur le bouton, tu risque apres d'avoir des erreur ou de penser a gener l'erreur si le port est ouvert et tu demande a l'ouvrir encore une fois, ,, alors ouvre le port au debut et fermes le a la fin de ton programme!!!
et pour la variable qui v ate recuperer les données , soit un label1.caption ou un text1.text ou autre varible a declarer en exterieur de ta boucle ou ton timer et aussi ecrits que cette variabe=variable & portxxx.input
comme ca tu pourra lire toute la chaine mais bon apres tu fera ta limitation de la chaine nmea dont le debut est un $ ,,,,
remf
Messages postés
8
Date d'inscription
dimanche 12 novembre 2000
Statut
Membre
Dernière intervention
19 mai 2005
-
bonjour est ce que quelqu'un pourrait m'éclairer un peu?...
merci

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.