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.
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.