Décodage gps sur port serie, vitesse en km/h et distance parcourue

Soyez le premier à donner votre avis sur cette source.

Snippet vu 27 808 fois - Téléchargée 30 fois

Contenu du snippet

Salut, voici un petit bou de code pour traiter les information venant d'un recepteur GPS sur le port serie. Moi personnelement j'utilise un GPS qui m'envoie les info par bluetooth. Le programme récupére simple les trames envoyé sur le RS232, et le plus dur est de les interprétaient.
Dans un premier temps je récupére la position GPS en coupant la chaine de caractaire recu, puis je l'enregistre. Quand j'ai un deuxiéme point (donc 1 seconde aprés) je fait un méchant calcul pour trouver la distance parcourue (je ne tient pas compte de la hauteur), puis comme c'est sur une periode de 1 seconde je multipli par 3600 pour avoir la vitesse entre les deux point. En faite c pas une vitesse instantanée mais une vitesse moyenne sur 1 seconde!!! a vous de jugé!!!
Ce soft marche pour les GPS avec les protocole NMEA-0183 (V3.01), GGA(1), GSA(3)
Les données que vous devez recevoir sont de ce types : $GPGGA,071603.815,4704.9358,N,00221.5265,E,1,06,1.9,184.7,M,,,,0000*01
Mais en gardant le même principe que moi vous pouvez l'adaptez a d'autre protocole GPS, le tous et de savoir où est quoi!!!
PS: il y a souvent un petit décalage par rapport au compteur de voiture, donc vous pouvez multipliez par 1.1 environs pour avoir comme votre voiture.

Source / Exemple :


Private Sub Timer1_Timer()
Dim Latitude_degre As Double
Dim Latitude_minute As Double
Dim Emisphére_N_S As String
Dim Longitude_degre  As Double
Dim Longitude_minute As Double
Dim Emisphére_E_O As String
Dim latitude1 As String
Dim debut As Integer
Dim l As Integer
Dim dla As Double
Dim dlg As Double
Dim a As Double

Temp = MSComm1.Input
If (InStr(Temp, "$GPGGA") <> 0) Then
    Temp = Mid(Temp, InStr(Temp, "$GPGGA"), 50)' recupére les 50 caractére suivant "$GPGGA"
    Temp = Mid(Temp, 1, 50)
    Label22.Caption = Temp
    If (Len(Temp) >= 50) Then
        debut = InStr(10, Temp, ",") + 1 'cherche le debut des coordonnée GPS
        Latitude_degre = Mid(Temp, debut, 2)
        'la variable l contient le nombre de chiffre qui représsente la latitude en minute(3 ou 4)
        l = InStr(debut + 2, Temp, ",") - InStr(debut + 2, Temp, ".") - 1
        Latitude_minute = Mid(Temp, debut + 2, 2) & "," & Mid(Temp, debut + 5, l)
        'Emisphére_N_S = Mid(Temp, debut + 10, 1)
        Longitude_degre = Mid(Temp, debut + 12, 3)
        'la variable l contient le nombre de chiffre qui représsente la longitude en minute(3 ou 4)
        l = InStr(debut + 15, Temp, ",") - InStr(debut + 15, Temp, ".") - 1
        Longitude_minute = Mid(Temp, debut + 15, 2) & "," & Mid(Temp, debut + 18, l)
        'Emisphére_E_O = Mid(Temp, debut + 23, 1)
        If (i = False) Then
            i = True
            Latitude_1 = (Latitude_degre + Latitude_minute / 60) * 3.14159265358979 / 180
            Longitude_1 = (Longitude_degre + Longitude_minute / 60) * 3.14159265358979 / 180
            dla = Abs(Latitude_1 - Latitude_2)
            dlg = Abs(Longitude_1 - Longitude_2)
            a = Sin(dla / 2) * Sin(dla / 2) + Cos(Latitude_1) * Cos(Latitude_2) * Sin(dlg / 2) * Sin(dlg / 2)
            distance = 6375 * 2 * Atn(Sqr(a)) * 1.1
        Else
            i = False
            Latitude_2 = (Latitude_degre + Latitude_minute / 60) * 3.14159265358979 / 180
            Longitude_2 = (Longitude_degre + Longitude_minute / 60) * 3.14159265358979 / 180
            dla = Abs(Latitude_2 - Latitude_1)
            dlg = Abs(Longitude_2 - Longitude_1)
            a = Sin(dla / 2) * Sin(dla / 2) + Cos(Latitude_1) * Cos(Latitude_2) * Sin(dlg / 2) * Sin(dlg / 2)
            distance = 6375 * 2 * Atn(Sqr(a)) * 1.1 ' pour avoir comme les compteur de voiture 
        End If
        distance_total = distance + distance_total
        Label3.Caption = distance_total
        Label1.Caption = distance * 3600 
        compteur_km_2 Label1.Caption
        Temp = ""
    End If
Else
    Temp = ""
End If
End Sub

Conclusion :


Néssiter pas a me posser des question si je n'ai pas été clair.

A voir également

Ajouter un commentaire

Commentaires

Messages postés
4
Date d'inscription
samedi 26 mars 2011
Statut
Membre
Dernière intervention
17 août 2011

Salamou Alaikom, bonjour à tous,
je veux récupérer des informations de mon périphérique GPS distant qui envoie les données par des messages GPRS ou GSM n utilisant les commandes AT, quelquns peut m'aider SVP. Merci
Messages postés
1
Date d'inscription
samedi 10 janvier 2009
Statut
Membre
Dernière intervention
15 mars 2010

bonjour à tous,
je suis entrain de faire mon PFE avec le "module GPS ET312" je vais le cummuniquer avec une carte a base de microcontroleur avec la liaison RS232(norme NMEA)".
-->pour le moment je suis entrain de familiariser avec le programme MBasic pour programmer le PIC 16F876..., et la shui bloqué pouvez vous m'orienter?
-->pour le ET312 je veut savoir comment modifier ses parametres
--> finalement lorsque j l'ai connecté a mon PC il marche sans arret(il donne des trammes successive de type GGA GLL GSA RMC....) là je veut qu'il me donne les information que lorsque je le demande.

merci
Messages postés
67
Date d'inscription
dimanche 27 mars 2005
Statut
Membre
Dernière intervention
5 février 2012
1
Bonjour Messieurs

je recherche la procedure pour (suite à relevé gps sur $GPRMC) calculer et comparer un point geographique .
Je m'explique : imaginons que je localise la latitude et longitude d'un endroit , je voudrais avoir une detection sur le pda-gps quand je m'approche de ce relevé (evidemment je ne pense pas que l'on puisse comparer au millimetres!) ex : une voiture passant à proximité du relevé pourrait le signaler (plusieurs metres de décalage merci de votre réponse )
Messages postés
1
Date d'inscription
mercredi 28 février 2007
Statut
Membre
Dernière intervention
3 avril 2007

salut a tous, mon pb a moi est de recevoir les données GPS via le GPRS de l'opérateur de télécom sur mon serveur;je nai aucune idée la dessus,please de l'aide!!
Messages postés
1
Date d'inscription
vendredi 9 mars 2007
Statut
Membre
Dernière intervention
9 mars 2007

Wahou, je suis plutot noob en codage (étudiant plutot restreind au C dans mon cas) et je me demandais si cette applet pouvais etre codé en C affin de tourner sur un RTOS (qui peut lancer plusieurs taches en C bien sur) donc comment récupérer des variables telles que la vitesse , la latitude et longitude dans des variables globales ... ?
Donc En C, comment obtenir le meme resultat ?
Afficher les 38 commentaires

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.