begin process at 2012 02 13 03:25:37
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Périphériques

 > DÉCODAGE GPS SUR PORT SERIE, VITESSE EN KM/H ET DISTANCE PARCOURUE

DÉCODAGE GPS SUR PORT SERIE, VITESSE EN KM/H ET DISTANCE PARCOURUE


 Information sur la source

Note :
7 / 10 - par 3 personnes
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Périphériques Classé sous :décodage, gps, com, distance, parcourue Niveau :Débutant Date de création :11/08/2005 Vu :23 452

Auteur : pompier0112

Ecrire un message privé
Commentaire sur cette source (38)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
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

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


 Sources du même auteur

GESTION D'UN FLOTTE DE VÉHICULE VIA UNE RADIO EMC SOUS MAPPO...

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) LIRE ET CHANGER LA LUMINOSITÉ DES ÉCRANS LCD (DE PORTABLE) C... par ShareVB
Source avec Zip Source avec une capture VISUAL BASIC ET MICROPROCESSEUR MBED par ccllee
Source avec Zip Source avec une capture Source .NET (Dotnet) VARIATEUR SECTEUR 11 VOIES SUR PORT SERIE OU USB par mays
Source avec Zip Source avec une capture PILOTER LES PORTS PARALLELES. par djebbipgm
Source avec Zip PILOTER LES PORT COMM DE PC par djebbipgm

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture [VBA EXCEL] CALCULER LA DISTANCE ENTRE DEUX COORDONNÉES GÉOG... par jack
Source avec Zip Source avec une capture AIRPORT FINDER par jrichaud
Source avec Zip LECTURE NMEA SUR PDA par Bobdesbois
DONNE LA DISTANCE (EN M) ENTRE DEUX POINTS DE COORDONNÉES GÉ... par CADRATURE
Source avec Zip Source .NET (Dotnet) COMPTEUR DE METRES POUR MOUSE ( SOURIS ) par bernie666

Commentaires et avis

Commentaire de Stephane le 11/08/2005 20:12:37

salut

je peux pas tester ta source tout simplement parce que j'ai pas de gps :D

en revanche ce que tu pourrait faire c'est en comparant la vitesse à t, et t-1, déduire l'acceleration, pour pouvoir obtenir une vitesse instantanée théorique.

je ne suis pas sur que ca fonctionne mais ca devrait.

en donnant v1 et v2 (v2 la nouvelle vitesse)
l'acceleration vaut : a=(v2-v1)/1
et donc la vitesse instantané, avec t compris entre 0 et 1

vt = v2 + a*t
avec v2 la derniere vitesse

t represente le temps en seconde depuis la derniere reception

voila, j'espere que ta compris mes explication, et qu'elles marcheront si tu les appliquent.
++

Commentaire de bozo76 le 11/08/2005 21:23:09

Super Prog Pompier je le testerai mais bon j'ai TomTom3 qui me donne ma vitesse instantanée qui est a vrai dire très proche de mon compteur qlors pourquoi ne pas essayer les 2 pour comparer !!! et je te dirais ce que vaut ta vitesse moyenne par  contre elle ne sera valable que lorsque tu sera à vitesse stabilisé et pas lorsque tu démarre ou tu freines !!!  Mais bon tu es sur la bonne voix pour développer TomTom 6 alors continue !!!

Et Merci stephane tu viens de résoudre un problème de physique de 1ère S ... (à le bon vieux temps)
j'espère que tu auras ton bac avec cette jolie démonstration. (lol) à moins que tu l'ai déjà dans ce cas : félicitations.

Bon allez moi j'ai un dossier technique sur les propagations des champs électrique à rédiger en Anglais !!
@ ++
et Merci pour ce petit prog

Commentaire de Stephane le 12/08/2005 00:25:51

bozo > j'ai mon bac S SI spé math

au vu de la phrase "je fait un méchant calcul pour trouver la distance parcourue" j'ai preferé expliquer "clairement" comment faire...

si je lui dit d'integrer 2 fois la distance parcourue, je sais pas s'il comprendra.
Donc je donne les formules.

a+

Commentaire de pompier0112 le 12/08/2005 07:21:27

Sthephane > la phrase "je fait un méchant calcul pour trouver la distance parcourue" un de l'humour pour les personne qui y connaissent rien.
Le but de ce soft dans un premier temps a été de traiter les informations recu sur le GPS, la vitesse est venu qu'aprés ce rajouté desssus, sans vouloir ce prendre la tête !!!

pour info, la double integration ne me fait pas peur -> Bac S, Prépa, Ecole d'ingénieur (3 iéme année)
Merci quand meme de vos commentaire . (pour ceux qui y connaissent rien)

Commentaire de bouv le 12/08/2005 09:10:01

Super code !
Si quelqu'un sait comment recupérer les mêmes infos depuis un GPS Bluetooth : l'info est la bienvenue.

Pompier0112>>Concernant l'altitude, tu ne sait pas comment la traiter ou c'est simplement parce que quand on utilise ça en ville la variation de niveau est souvent négligeable.

PS : J'ai pas de Bac S (simple STT compta), mais ces calculs ne me posent pas de pb. ;-)

Bonne prog

Commentaire de pompier0112 le 12/08/2005 09:28:14

en faite moi celui que j'utilise est un gps bluetooth!!!, en faite il faut le connecter en SPP ca simule un port serie, et tu choisie son numéro de port. aprés son VB6 ca se traite comme un port normal:
Temp = MSComm1.Input

voili voila... si ca répond a ta question

Commentaire de Stephane le 12/08/2005 12:26:38

pompier > ok dsl, javais pas saisi l'ironie :)

Commentaire de bouv le 12/08/2005 12:35:20

ok merci. Par contre qu'appel tu connecter en SPP ?

Commentaire de pit1 le 12/08/2005 20:54:05

Il y a plus simple pour décoder le string NMEA, utilise donc la fonction SPLIT!

En fait la vitesse est dans le string NMEA, pas besoin de calculer ( il faut tout de même la convertir de mph vers kmh)...

Il a encore 2 choses à vérifier:
- le fix actuel du GPS doit être valide (paramètre A dans le string)
- le checksum doit être correct.

La procédure ci-dessous le fait.

Dans mon application j'utilise le structure suivante (cela permet aisément des calculs plus poussés, car les valeurs sont déja converties vers le bon type):


Public Type GPSdata
    DeviceStatus As String
    DateTimeUTC As Date
    DateTimeLocal As Date
    ReceiverWarning As Boolean
    Latitude As Double
    LatitudeDir As String
    LatDecDeg As Double
    Longitude As Double
    LongitudeDir As String
    LongDecDeg As Double
    SpeedKMH As Double
    Course As Double
    MagneticDeclination As Double
    Checksum As Boolean
End Type

Pour la conversion de la date et de l'heure, il faut encore savoir dans quelle timezone se trouve le PC local, il faut donc définir l'api et les structures suivantes:

Private Declare Function GetTimeZoneInformation Lib "kernel32" _
                        (lpTimeZoneInformation As TIME_ZONE_INFORMATION) As Long

Private Type SYSTEMTIME
    wYear As Integer
    wMonth As Integer
    wDayOfWeek As Integer
    wDay As Integer
    wHour As Integer
    wMinute As Integer
    wSecond As Integer
    wMilliseconds As Integer
End Type

Private Type TIME_ZONE_INFORMATION
    Bias As Long
    StandardName As String * 64
    StandardDate As SYSTEMTIME
    StandardBias As Long
    DaylightName As String * 64
    DaylightDate As SYSTEMTIME
    DaylightBias As Long
End Type

La sub suivante décode le string:

Public Function decodeRMC(ByVal RMCstring As String) As GPSdata
    
    'The RMC-Datasentence (RMC=recommended minimum sentence C)
    'is a recommendation for the minimum, that a GPS-Receiver should give back.
    'It looks like this: "$GPRMC,191410,A,4735.5634,N,00739.3538,E,0.0,0.0,181102,0.4,E,A*19"
    
    Dim ChkDat As String
    Dim ChkSum As String
    Dim dat() As String
    Dim i As Integer, s As Integer
    Dim TZI As TIME_ZONE_INFORMATION
    Dim nZoneCorrection As Long
    Dim ret As Long
    Dim l As Long

    On Error Resume Next
    
    ' strip everything before the $ and convert to uppercase
    i = InStr(RMCstring, "$")
    decodeRMC.DeviceStatus = Trim$(Left$(RMCstring, i - 1))
    If i = 0 Then
       decodeRMC.Checksum = False
       Exit Function
    End If
    RMCstring = Mid$(RMCstring, i - 1)
    RMCstring = UCase$(Trim$(RMCstring))
    
    Debug.Print RMCstring
    
    'Checking initstring. Must be the same for all RMC sentences.
    If Left$(RMCstring, 1) <> "$" Or _
       Mid$(RMCstring, 4, 3) <> "RMC" Then
       decodeRMC.Checksum = False
       Exit Function
    End If
    
    ' ----------------------------------------
    ' check if string is valid (checksum ok?)
    ' ----------------------------------------
    'Extracting that part of the sentence that is needed to calculate the checksum
    ChkDat = Mid$(RMCstring, 2, InStr(RMCstring, "*") - 2)
    dat = Split(RMCstring, ",")
    'Calculating checksum and comparing it
    ChkSum = Replace(dat(11), "*", "")
    ChkSum = Left$(ChkSum, 2)
    s = 0
    l = Len(ChkDat)
    For i = 0 To l
        s = s Xor Asc(Mid$(ChkDat, i, 1))
    Next
    If s <> "&h" & ChkSum Then
       decodeRMC.Checksum = False
       Exit Function
    End If
    
    ' ----------------------------------------
    ' UTC time and date
    ' ----------------------------------------
    decodeRMC.DateTimeUTC = #12:00:00 AM#
    decodeRMC.DateTimeUTC = DateAdd("h", CDbl(Mid$(dat(1), 1, 2)), decodeRMC.DateTimeUTC)
    decodeRMC.DateTimeUTC = DateAdd("n", CDbl(Mid$(dat(1), 3, 2)), decodeRMC.DateTimeUTC)
    decodeRMC.DateTimeUTC = DateAdd("s", CDbl(Mid$(dat(1), 5, 2)), decodeRMC.DateTimeUTC)
    decodeRMC.DateTimeUTC = decodeRMC.DateTimeUTC + #1/1/2000#
    decodeRMC.DateTimeUTC = DateAdd("d", CDbl(Mid$(dat(9), 1, 2)) - 1, decodeRMC.DateTimeUTC)
    decodeRMC.DateTimeUTC = DateAdd("m", CDbl(Mid$(dat(9), 3, 2)) - 1, decodeRMC.DateTimeUTC)
    decodeRMC.DateTimeUTC = DateAdd("yyyy", CDbl(Mid$(dat(9), 5, 2)), decodeRMC.DateTimeUTC)
    
    ' ----------------------------------------
    ' local time and date
    ' ----------------------------------------
    ret = GetTimeZoneInformation(TZI)
    nZoneCorrection = TZI.Bias
    If ret = 1 Then
        'TIME_ZONE_ID_STANDARD
        nZoneCorrection = nZoneCorrection + TZI.StandardBias
    ElseIf ret = 2 Then
        ' TIME_ZONE_ID_DAYLIGHT
        nZoneCorrection = nZoneCorrection + TZI.DaylightBias
    Else
        Debug.Assert (0)
    End If
    nZoneCorrection = -nZoneCorrection
    decodeRMC.DateTimeLocal = DateAdd("n", nZoneCorrection, decodeRMC.DateTimeUTC)
    
    ' ----------------------------------------
    'ReceiverWarning
    ' ----------------------------------------
    ' GPS status: A means data is valid, V means data is invalid
    If dat(2) = "A" Or dat(2) = "" Then
        decodeRMC.ReceiverWarning = False
    Else
        decodeRMC.ReceiverWarning = True
    End If
    
    ' ----------------------------------------
    'Latitude (Length)
    ' ----------------------------------------
    decodeRMC.Latitude = Val(dat(3))
    decodeRMC.LatitudeDir = dat(4)
    ' convert NMEA $GPRMC-format position information to decimal-degrees representation
    decodeRMC.LatDecDeg = Int(Val(dat(3)) / 100)
    decodeRMC.LatDecDeg = decodeRMC.LatDecDeg + ((Val(dat(3)) / 100 - decodeRMC.LatDecDeg)) / 60 * 100
    If dat(4) = "S" Then
        decodeRMC.LatDecDeg = decodeRMC.LatDecDeg * -1
    End If
    
    ' ----------------------------------------
    ' Longitude (Width)
    ' ----------------------------------------
    decodeRMC.Longitude = Val(dat(5))
    decodeRMC.LongitudeDir = dat(6)
    ' convert NMEA $GPRMC-format position information to decimal-degrees representation
    decodeRMC.LongDecDeg = Int(Val(dat(5)) / 100)
    decodeRMC.LongDecDeg = decodeRMC.LongDecDeg + ((Val(dat(5)) / 100 - decodeRMC.LongDecDeg)) / 60 * 100
    If dat(6) = "W" Then
        decodeRMC.LongDecDeg = decodeRMC.LongDecDeg * -1
    End If
    
    ' ----------------------------------------
    'SpeedKMH (needs to be converted from knots)
    ' ----------------------------------------
    decodeRMC.SpeedKMH = Val(dat(7)) * 0.54
    
    ' ----------------------------------------
    'Course without movement
    ' ----------------------------------------
    decodeRMC.Course = Val(dat(8))
    
    ' ----------------------------------------
    'MagneticDeclination
    ' ----------------------------------------
    decodeRMC.MagneticDeclination = Val(dat(10))

    ' ----------------------------------------
    'Final check on the date, year should be > 2000
    ' ----------------------------------------
    If Year(decodeRMC.DateTimeLocal) < 2001 Then
        decodeRMC.ReceiverWarning = True
    End If
    
End Function


Public Function Utc2Local(ByVal tim As Long, ByVal dat As Long) As Date
    
    ' time format long, eg 203756 for 20:37:56
    ' date format long, eg 230605 for 23/06/2005

    Dim t As String
    Dim d As String
    Dim TZI As TIME_ZONE_INFORMATION
    Dim nZoneCorrection As Long
    Dim ret As Long
    
    ' convert date and time to string
    t = Right$(String$(6, "0") & CStr(tim), 6)
    d = Right$(String$(6, "0") & CStr(dat), 6)
    ' UTC time and date
    Utc2Local = #12:00:00 AM#
    Utc2Local = DateAdd("h", CDbl(Mid$(t, 1, 2)), Utc2Local)
    Utc2Local = DateAdd("n", CDbl(Mid$(t, 3, 2)), Utc2Local)
    Utc2Local = DateAdd("s", CDbl(Mid$(t, 5, 2)), Utc2Local)
    Utc2Local = Utc2Local + #1/1/2000#
    Utc2Local = DateAdd("d", CDbl(Mid$(d, 1, 2)) - 1, Utc2Local)
    Utc2Local = DateAdd("m", CDbl(Mid$(d, 3, 2)) - 1, Utc2Local)
    Utc2Local = DateAdd("yyyy", CDbl(Mid$(d, 5, 2)), Utc2Local)
    ' local time and date
    ret = GetTimeZoneInformation(TZI)
    nZoneCorrection = TZI.Bias
    If ret = 1 Then
        'TIME_ZONE_ID_STANDARD
        nZoneCorrection = nZoneCorrection + TZI.StandardBias
    ElseIf ret = 2 Then
        ' TIME_ZONE_ID_DAYLIGHT
        nZoneCorrection = nZoneCorrection + TZI.DaylightBias
    Else
        Debug.Assert (0)
    End If
    nZoneCorrection = -nZoneCorrection
    Utc2Local = DateAdd("n", nZoneCorrection, Utc2Local)

End Function

Commentaire de pit1 le 12/08/2005 20:57:33

Désolé, la dernière sub "Utc2Local" n'est pas nécessaire, j'en ai besoin pour autre chose ...

Commentaire de pompier0112 le 12/08/2005 21:04:50

Merci bien pour le petit truc , je vai essai ca le plus rapidement possible MERCI en core :-)))

Commentaire de bouv le 13/08/2005 13:42:14

Ouai ça a l'air super.
Serait-il possible d'avoir un zip ?
Pompier0112>>Pourais-tu me dire ce que signifie connecter en SPP ?

Commentaire de pompier0112 le 14/08/2005 12:56:58

En faite lorsque je j'allume mon GPS bluetooth, il y a un icon d'ordinateur qui apparai dans la fenetre "favoris bluetooth" et quand tu fait un clic droit dessus il te propose de la connecter en "SPP" qui corespond a creer un port serie virtuel. LA signification de SPP est : Sérial Port Profile, mais en tous cas ca marche.

Commentaire de bouv le 14/08/2005 21:31:36

Ok merci pour l'info..
++

Commentaire de oynis le 15/08/2005 19:31:00

Bonjour a tous,

J'ai lu attentivement vos codes, tous interressant mais apparement vous n'avez pas de routine reconstituant la trame au cas ou le transfert depuis le port serie ne soit pas complet. Il m'arrive de ne pas avoir la fin d'une trame. J'utilise un recepteur gps bluetooth TomTom. Je ne sais si c'est la raison. A votre avis ?

Bon codage et @ + !

Commentaire de jjbailet le 21/08/2005 12:55:47

Bonjour à tous,
Le code pour le GPS m'intêresse mais mon GPS est connecté sur un port type carte CompactFlash et je ne sais pas comment récupérer les données à partir de ce port.
Quelqu'un pourrait m'aider ???
Merci
et @+ jjbailet

Commentaire de pompier0112 le 21/08/2005 14:42:19

Essai peut etre de te reporter a la notice ou bien au driver correspondant a ton GPS. Il y a peut etre un émulateur de port serie pour ce type de GPS???
Donne la référence du GPS ca peut aider.
++

Commentaire de jjbailet le 22/08/2005 12:07:15

Merci d'avoir répondu aussi vite.
Je ne connais pas le protocole de transmission de données d'un port CompactFlash sur PC et je n'ai pas de driver vendu pour PC car au départ le GPS était prévu pour un Pocket-PC.
Les références de mon GPS CompactFlash sont :
marque : AVESTA
modèle : HI-302CF
Input : 3,3V continu, 90 mA

Commentaire de el_teedee le 12/09/2005 15:45:02

Salut tout le monde,
et salut Bouv, y'avait longtemps, tu vas bien depuis le dernier coup ? :-)

Bon, je m'en vais vite télécharger ce petit code et essayer de le tester.

>Bouv : si tu t'intéresses au SPP (ou service port série) j'ai de l'info à te passer la dessus. En effet, je suis en stage de 3ème année de cycle ingénieur, et la je bosse sur une appli sur pocket pc en Bluetooth, et j'ai utilisé le SPP pour la communication Bluetooth.
ma source sur le bluetooth en SPP : http://www.csharpfr.com/code.aspx?ID=33082

Si vous voulez la tester au passage, j'en serais ravi pour avoir des commentaires constructifs ;)

Aller je m'en vais tester le soft de notre ami Pompier0112

el_teedee

Commentaire de el_teedee le 12/09/2005 15:54:59

Bon, en fait, tu sais quoi ?

vu que je suis sous Visual Studio DotNET, ton composant mscomm n'est pas connu (je crois que j'avais déjà vu ce pb qql part)
donc, si tu m'autorise, et surtout lorsque j'aurais le temps, j'aimerais bien passer ta source avec la gestion d'un port série (pour GPS et GPS Bluetooth) en C#.

Qu'en penses tu ?

Commentaire de pompier0112 le 12/09/2005 17:58:25

il n'y a aucun pb, tu peut le passé en C#!

Commentaire de bouv le 12/09/2005 23:12:27

Slt EL_TEEDEE, effectivement cela fait lgtp. Ca va très bien merci.
Tu programme pour les Pocket PC ! Interressant ! Saurais-tu passer ce code pour Windows Mobile ?

A la revoyure.

Bonne prog
++

Commentaire de el_teedee le 13/09/2005 09:48:46

Oki, c cool,
j'essaierais de m'y atteler dès que j'aurais un peu plus de temps...

>Bouv : je développe sur pocket pc pas depuis longtemps, et j'en suis a mon premier programme, donc tu sais....
Mais il n'y a vraiment pas grand chose qui diffère entre C# pour windows et C# pour Windows CE. Quelques composants en moins car le Compact Framework est plus léger, et quelques fonctions dont les paramètres ont été modifiés (ex : .GetString(...) ), mais sinon c pareil...

Voilou

Commentaire de bouv le 13/09/2005 19:30:59

Ok, moi je ne connais que le VB (v6)... mais si tu trouve le temps fait moi signe, cela m'interresse.
En fait je pars souvent faire du Snowboard avec mes freres et des potes et on s'est toujours demandé à quelle vitesse on pouvait bien descendre...

Bonne prog
++

Commentaire de bouv le 16/11/2005 10:46:44

Salut, j'ai un petit problème. Mon GPS me renvoi l'info suivante sur MSComm1.Input :

$GPGGA,093446.585,,,,,0,00,,,M,,,,0000*31
$GPGLL,,,,,093446.585,V,N*7E
$GPGSA,A,1,,,,*32
$GPGSV,3,1,10,09,80,077,27,05,57,241,11,07,31,055,,30,25,239,*77
$GPGSV,3,2,10,22,21,276,11,14,20,317,21,26,17,160,,18,13,238,*7F
$GPGSV,3,3,10,29,07,158,,24,05,053,*7D
$GPRMC,093446.585,V,,,,,,,161105,,,N*4B
$GPVTG,,T,,M,,N,,K,N*2C
$GPGGA,093447.585,,,,,0,00,,,M,,,,0000*30
$GPGLL,,,,,093447.585,V,N*7F
$GPRMC,093447.585,V,,,,,,,161105,,,N*4A
$GPVTG,,T,,M,,N,,K,N*2C
$GPGGA,093448.585,,,,,0,00,,,M,,,,0000*3F
$GPGLL,,,,,093448.585,V,N*70
$GPRMC,093448.585,V,,,,,,,161105,,,N*45
$GPVTG,,T,,M,,N,,K,N*2C
$GPGGA,093449.585,,,,,0,00,,,M,,,,0000*3E
$GPGLL,,,,,093449.585,V,N*71
$GPRMC,093449.585,V,,,,,,,161105,,,N*44
$GPVTG,,T,,M,,N,,K,N*2C
$GPGGA,093450.585,,,,,0,00,,,M,,,,0000*36
$GPGLL,,,,,093450.585,V,N*79
$GPGSA,A,1,,,,*32
$GPGSV,3,1,10,09,80,077,27,05,57,241,12,07,31,055,,30,25,239,*74
$GPGSV,3,2,10,22,21,276,13,14,20,317,20,26,17,160,,18,13,238,*7C
$GPGSV,3,3,10,29,07,158,,24,05,053,*7D
$GPRMC,093450.585,V,,,,,,,161105,,,N*4C
$GPVTG,,T,,M,,N,,K,N*2C

Et ni le code de pompier0112 ni celui de PIT1 ne fonctionnent. Quelqu'un peut-il m'aider.

Commentaire de kev900001 le 19/12/2005 12:06:08

salut je voudrai bien tester ton prog
car je suis super interesse mais y at il moyen de le faire marcher pour une sonde gps usb
merci

Commentaire de pit1 le 19/12/2005 20:26:19

Salut Bouv,

en fait il faut filter sur les lignes GPRMC, mais ton GPS n'a pas encore assez de satellites pour détermineer la position exacte "V", lorque le fix est bon, il renvoie un "A". Probablement la vue sur le ciel n'est pas bonne ou il n'a pas encore eu assez de temps ...

Salut Kev,

suffit de mapper le port USB sur un port COM et cela marche (normalement il y a un petit utilitaire Portset.exe ou semblable sur le CD-Rom de ton GPS/Adapteur)

Commentaire de bouv le 19/12/2005 22:04:12

PIT1>>Merci pour l'info, en fait pour le V c'est du au fait que je programme au fond de mon bounker (appart). Sinon j'ai cherché un peu sur le net et j'ai trouvé pas mal d'infos. En fait chaque ligne renvoi des infos complémentaires. Il y en a une par exemple qui renvoi la vitesse directement en Km/H. Si j'ai le temps je posterai un petit module.

PS : EL_TEEDEE. Je me suis mis au .NET donc je pense pouvoir porter le code sur PPC.
Donc si je post un code ce sera en .NET

++

Commentaire de MINDNET le 14/01/2006 16:45:08

Salut !

Es tu arrivé a situer tes coordonnées sur une picturebox integrant la carte de ta region ?

@+++

Commentaire de pit1 le 14/01/2006 18:58:22

Bouv: fais attention pour le PPC, il y a que .net Compact Framework (.netcf) qui est quand même assez limité (j'ai programmé avec, pas mal de fonctions manquent).

MindNet: pour la carte, c'est assez facile avec www.mapquest.com:

D'abord il faut connaitre l'url de la page web, qui contiendra un lien vers le gif de la carte:

' initilize variables
MapURL = "http://www.mapquest.com/maps/map.adp?size=big&latlongtype=decimal&latitude=%LATDECDEG%&longitude=%LONGDECDEG%&zoom=%ZOOM%"

url = MapURL
url = Replace(url, "%LATDECDEG%", Replace(Format$(lat, "#0.000000"), ",", "."))
url = Replace(url, "%LONGDECDEG%", Replace(Format$(lon, "#0.000000"), ",", "."))
url = Replace(url, "%ZOOM%", CStr(Zoom))

Ensuite reste à extraire le link vers le gif et de le télécharger:

GifURL = "e=9&GetMapDirect="
url = html
' strip after the first occurence of " after 'e=9&GetMapDirect'
url = Left$(url, InStr(InStr(url, GifURL), url, Chr$(34)) - 1)
' strip before the last occurence of " before 'e=9&GetMapDirect'
url = Mid$(url, InStrRev(url, Chr$(34)) + 1)

Commentaire de MINDNET le 15/01/2006 04:41:23

En faite , j'ai déja la carte de ma region (ile de la reunion) en format 2800x2400 fait par ign.
C'est pour de la randonnée (je veux faire la meme chose pour le maroc ...).
Depuis un mois j'ai pas trouver un bout de soft qui gere lat & long dans un picturebox avec scroll .Que des ocx ou dll  payant !!!
Merci !

Commentaire de utilsea le 20/03/2006 21:48:52

En ce qui concerne la vitesse, il suffit de recupérer l'info qui se trouve dans la trame VTG (beaucoup plus précise que la dérivé du point..., car sur les bons GPS calculée par un doppler sur les sats.
Juste avant le K c'est la vitesse en Kmh et le N en noeuds (1852m par heure).
Pour ce qui est des cartes de région il faut se palucher une transformation de coordonées (WGS84 vers projection locale) car la plupart des cartes sont en systèmes local (pour la Réunion good luck cela doit être un des systèmes les plus pourri que je connaisse).
Et pour la verification des trames, la valeur qui se trouve en hexa après l'étoile en fin de trame est le checksum qui se calcul faisant un ou exclusif de tous les chars entre $(exclu) et *(exclu).
A+

Commentaire de bil_hack le 24/01/2007 01:38:02

salut,
j'ai regardé vos commentaires a tous... je trouve ça génial
mais en fait mon probléme à moi est exactement le contraire.je m'explique en fait je developpe une appli sur ppc et je veux ecrire du texte dans le port serie du pocket pc (toutes les secondes) a partir d'un fichier texte.
j'arrive à lire mon fichier texte mais au moment de l'écriture, ça me catch une erreur IOexception.
si vous pouvez m'aidez!!!!
merci d'avance

Commentaire de jcdarcheville45460 le 09/03/2007 23:58:40

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 ?

Commentaire de sissyah le 03/04/2007 11:38:36

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

Commentaire de panterga le 24/07/2008 17:38:00

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 )

Commentaire de chahinem le 15/03/2010 09:34:28

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

Commentaire de imas1988 le 05/08/2011 11:35:22

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

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

adaptateur qui converti le port usb du gps en com [ par nourhanan ] salam je travaille sur une application qui necesitte d'enregistrer les coordonnées (latitude et longitude) relevé par le gps (de type garmin port usb) probleme avec dropdownlist [ par loveislam ] j'ai deux dropdownlistl"une charge tous les numero de commande et l'autre selon deux datesla deuxieme combo une fois charge les numero et je clic pour Lancer un service à distance [ par Portos67 ] Bonjour à tous,Voila j'ai un soucis pour démarrer un service à distance, en sachant que j'ai les droits admin sur les postes, j'arrive à connaître le gps est ON ou OFF?? [ par nourhanan ] salam comment je peux connaitre que mon gps connecté avec le port com est on ou off .Merci d'avance traceur de courbe [ par plate29 ] Bonjour, je souhaiterais savoir comment pourrais ton faire une courbe de vitesse avec vb6 et un tableau de point.Sachant que l'axe des abscisses serai problem dans "insert" au base de donner [ par ouafa1 ] Bonjour à tous je veux  faire une requêt de "insert" mais un mesage d'erreur s'affiche lors de l'execution :(syntaxe incorrecte vers "," )  Svp aide m Bug Affichage Pendant le Chargement de DATAGRIDView [ par ssefyou ] bonjour ,j'ai un souci d'affichage pendant  le chargement de ma datagridview http://www.monsterup.com/image.php?url=upload/1241438632129.jpg<a href Comment se connecter a l'objet COM d'une page internet avec son handle [ par andrebernard ] Bonjour à tousJe sais connecter l'objet COM d'une nouvelle instance d'internet explorer.Mais si par exemple, j'ouvre manuellement IE et que je desire


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,591 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales