begin process at 2010 09 04 14:22:17
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PDA

 > 

Divers

 > 

Général

 > 

déclencher évenement sur PDA en fonction d'une position GPS


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

déclencher évenement sur PDA en fonction d'une position GPS

jeudi 5 juin 2008 à 17:51:19 | déclencher évenement sur PDA en fonction d'une position GPS

FranckBBG

Bonjour,

J'ai récupéré le code source Lecteur GPS sur le site codePPC de stéphane Sibué, j'essaie d'y ajouter une procédure qui me permette de comparer latitude et longitude récupérée de la trame GPS avec latitude et longitude cible du point à atteindre. Si les coordonnées correspondent à un intervalle de tolérance près, on déclenche l'affichage d'une autre fenêtre (ici wTuBrules)
J'utilise VB.NET Compact Framework 2.0 qui ne me renvoie aucune erreur lors de la compilation, par contre qd je transfère sur le PDA et que je lance l'application, ça lance un message d'erreur.

Je pense que l'erreur provient de la logique de programmation, il y des notions de threads que je ne maîtrise pas par exemple...
N'hésitez pas à me demander des explications complémentaires.

Merci

Voilà ce que ça donne:

Public Class LectGPS

    Private Delegate Sub DelegateAjouterTrame(ByVal wTrame As String)
    Private pAjouterTrame As New DelegateAjouterTrame(AddressOf AjouterTrame)

    Private Delegate Sub DelegateAfficherGPRMC(ByVal wLatitude As String, ByVal wLongitude As String)
    Private pAfficherGPRMC As New DelegateAfficherGPRMC(AddressOf AfficherGPRMC)

    Private Sub BOU_Ouvrir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BOU_Ouvrir.Click

        TextBox1.Text = ListBox1.Items(0).ToString
        TextBox2.Text = ListBox1.Items(1).ToString

        SP_GPS.Open()

    End Sub

    Private Function TesterTrame(ByVal wTrame As String) As Boolean

        REM Une trame vide est forcément invalide
        If wTrame = "" Then Return False

        REM La trame doit commencer par $
        If wTrame.Chars(0) <> "$"c Then Return False

        REM Le *CS doit être présent
        If wTrame.Substring(wTrame.Length - 3, 1) <> "*" Then Return False

        REM Calcul du CheckSum
        Dim wCS As Integer
        For i As Integer = 1 To wTrame.Length - 4
            wCS = wCS Xor Asc(wTrame.Chars(i))
        Next
        Dim wHCS As String = Hex(wCS)
        If wHCS.Length < 2 Then wHCS = "0" & wHCS

        REM Si le CheckSum calculé est <> du CheckSum donné
        If wHCS <> wTrame.Substring(wTrame.Length - 2, 2) Then Return False

        REM Tout va bien
        Return True

    End Function

    Private Sub AjouterTrame(ByVal wTrame As String)

        REM On enlève le * CheckSum de la fin
        Dim wPos As Integer = wTrame.IndexOf("*"c)
        If wPos > -1 Then wTrame = wTrame.Substring(0, wPos)

        REM On ajoute la trame à la liste
        Dim wIndex As Integer = LST_Trames.Items.Add(wTrame)

        REM On sélectionne la nouvelle trame
        LST_Trames.SelectedIndex = wIndex

        REM Pour ne pas saturer la mémoire
        REM On limite le remplissage de la liste
        Do While LST_Trames.Items.Count > 50
            LST_Trames.Items.RemoveAt(0)
        Loop

    End Sub

    Private Sub SP_GPS_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SP_GPS.DataReceived

        Static wBuffer As String = ""

        Dim wCount As Integer = SP_GPS.BytesToRead
        Dim wData(wCount) As Char
        Dim wLen As Integer = SP_GPS.Read(wData, 0, wCount)
        wBuffer &= New String(wData, 0, wLen)

        Dim k As Integer

        Do

            k = wBuffer.IndexOf(vbCrLf)
            If k > -1 Then

                Dim wTrame As String = wBuffer.Substring(0, k)
                wBuffer = wBuffer.Substring(k + 2)
                If TesterTrame(wTrame) Then
                    Me.Invoke(pAjouterTrame, wTrame)
                    If wTrame.Substring(0, 7) = "$GPRMC," Then DecoderTrameGPRMC(wTrame)
                End If
            Else

                Exit Do
            End If

        Loop

    End Sub

    Private Sub AfficherGPRMC(ByVal wLatitude As String, ByVal wLongitude As String)

        TXT_Latitude.Text = wLatitude
        TXT_Longitude.Text = wLongitude

    End Sub

    Private Sub DecoderTrameGPRMC(ByVal wTrame As String)

        REM Liste des élements composant une trame RMC
        REM 00  GPRMC()
        REM 01  Heure du fix
        REM 02  Alerte (A=OK ; V=WARNIG)
        REM 03  Latitude au format ddmm.ss
        REM 04  Sens de la latitude (N=Nord=Positif, S=Sud=Négatif)
        REM 05  Longitude au format dddmm.ss
        REM 06  Sens de la longitude (E=Est=Positif, W=Ouest=Négatif)
        REM 07  Vitesse au sol en Knots (noeuds)
        REM 08  Cap vrai
        REM 09  Date du fix
        REM 10  Déclinaison magnétique
        REM 11  Sens de la déclinaison magnétique

        Dim wItems() As String
        Dim wLatitude As String = ""
        Dim wLongitude As String = ""

        REM On éclate les différents éléments de la trame
        wItems = wTrame.Split(",")

        REM La trame doit faire au moins 12 éléments
        If wItems.Length < 12 Then Throw New ArgumentException

        REM Le premier élement doit être "GPRMC", Sinon Erreur
        If wItems(0) <> "$GPRMC" Then Throw New ArgumentException

        REM Si alerte=A les données sont valables
        If wItems(2) = "A" Then
            wLatitude = wItems(3)
            wLongitude = wItems(5)
        End If

        If _
                wLatitude < ListBox1.Items(0) + 0.01 _
               And wLatitude > ListBox1.Items(0) - 0.01 _
               And wLongitude > ListBox1.Items(1) - 0.01 _
               And wLongitude < ListBox1.Items(1) + 0.01 Then

            Dim wTuBrules As New TuBrules
            wTuBrules.Show()
        ElseIf Me.Invoke(pAfficherGPRMC, wLatitude, wLongitude) Then
        End If

        REM Si alerte=A les données sont valables
        Me.Invoke(pAfficherGPRMC, wLatitude, wLongitude)

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        If SP_GPS.IsOpen Then SP_GPS.Close()
        Me.Close()

    End Sub
End Class

Franck
jeudi 5 juin 2008 à 22:38:40 | Re : déclencher évenement sur PDA en fonction d'une position GPS

Stephane33

Membre Club Administrateur CodeS-SourceS
et le message d'erreur ?

Le savoir n'est que le filtre de l'experience
jeudi 5 juin 2008 à 23:21:37 | Re : déclencher évenement sur PDA en fonction d'une position GPS

FranckBBG

Bonsoir,

C'est un message d'erreur qui s'affiche sur le pda physique (je ne le teste pas sur l'émulateur du pc):

Voici l'enchaînement:
- j'appuie sur le boutton OUVRIR
- la cible s'affiche dans les 2 textBox (Latitude et Longitude provenant de la ListBox)
- quelques trames lues s'affichent dans la List_Trame
- PUIS ERREUR:
ANIO 1.0.exe (le nom de mon programme)
InvalidCastException

à
Microsoft.visualBasic.CompilerServices.Conversions.ToDouble()
à
Microsoft.VB..........................Conversions.ToDouble()
à
Microsoft.VB.CompilerServices.Operators.AddObject()
à
ANIO_1._0.LectGPS.DecoderTrameGPRMC()
à
ANIO_1._0.LectGPS.SP_GPS_dataReceived()
à
System.IO.Ports.SerialPort.CatchReceivedEvents()
at EventLoopRunner.CallReceivedEvents()
at WorkItem.doWork()
à System.Threading.timer.ring()

Voilà terminé il me propose de quitter puis il ferme l'application... J'espère que ça vous dira qqch. En tout cas merci d'avance.

Franck
vendredi 6 juin 2008 à 14:05:12 | Re : déclencher évenement sur PDA en fonction d'une position GPS

Stephane33

Membre Club Administrateur CodeS-SourceS

tu as une erreur de conversion vers un double dans cette fonction
LectGPS.DecoderTrameGPRMC()

vendredi 6 juin 2008 à 14:26:10 | Re : déclencher évenement sur PDA en fonction d'une position GPS

FranckBBG

Alors j'ai déjà essayé de récupérer ma trame découpée, nettoyée et de convertir wTrame.Items(3) pour la latitude et wTrame.Items(5) pour la longitude et les convertir avec un CType (....., ToDouble) avant de faire mes calculs dessus mais il me renvoie toujours la même erreur...

C'est pour ça que je demandais du coup si c'était pas plus dans la construction du code que ça plantait, je veux dire dans l'utilisation de variabe bloquée, ou bien l'utilisation de thread pas très bien comprise. Plus dans la technique de programmation en fait...

Pour les conversions j'ai l'impression d'avoir essayé tout ce que je pouvais,

- créer une procédure dédiée à la comparaison
- faire un invoke sur cette procédure
- convertir en single en double, laisser en string, virer les virgules, virer les points....

Je bloque à présent alors que le code est vraiment pas compliqué! 

Franck


Cette discussion est classée dans : string, rem, if, byval, wtrame


Répondre à ce message

Sujets en rapport avec ce message

comment indicer une textbox ? [ par ppiat ] Dans la tentative ci-dessous j'essaye de creer des textbox en série en créant un groupe....Dim n As <FONT co SuperWaba : problème d'affichage des caractères spéciaux. [ par grungy ] Bonjour, J'ai un petit souci d'affichage des caractères spéciaux dans SuperWaba. Je m'explique : Je remplis un Catalog grâce à un fichier qui peut êt VB.Net String en Double [ par JeffC1977 ] Salut...J'ai un problème de conversion de variable.J'ai un textbox qui est en string et je veux faire des calcul mathématique avex le nombre qui est d VB.Net Double en String Ok mais résultat diffère [ par JeffC1977 ] Salut...J'avais eu un prob avec mon exécutable sur mon Pocket PC... Variable double, string le "." et la "," on semé quelque problème. Ca fonctionne s RasGetEntryProperties RasSetEntryProperties [ par Baguauda ] Bonjour,je cherche un moyen de créer une connexion automatiquement, car pour le moment on est obligé de passé par Settings/Network and Dial-Up connect methode RDA [ par gzitoun ] Merci  cher Admin (desole pour le derangement....)Bonjour cher forum! J ai un souci dans l application de la methode RDA. Voici, une partie du cod VB.Net [ par JeffC1977 ] Salut...Je suis incapable d'utiliser deux Form...C'est-à-dire que j'utilise une form princiaple et j'aimerais etre capable de faire apparaitre une sec Appel webservice [ par scortex84 ] Bonjour,Je rencontre un problème plus qu'étrange : J'ai fais un webservice tout ce qu'il y a de plus bête : il reçoit un paramètre de type string, et RDA Push [ par lamiae2 ] bonsoir; j'ai un probleme avec la methode Push de remotdataaccess!!   il me donne le message d'erreur suivant " la table ne fait pas l'objet d'u


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Septembre 2010
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
27282930   

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 : 0,624 sec (3)

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