Jump to content

New in vb need help in array

- - - - -

This topic has been archived. This means that you cannot reply to this topic.
8 replies to this topic

#1
camolas

camolas

    Newbie

  • Members
  • Pip
  • 8 posts
Hi,

Im a hobiest in all that is microcontrolers, pcs, carpcs........ ok i star last year in pic basic pro (microcontroler language) made nice things on that.
Now im to put this vb to work with a gps usb receiver to get: lat, long, speed, n of sats,... but can do it. Can you vb masters help me?

'Reads GPS
Public Sub ReadGPSInfo(ByVal sData As String, Optional CommaSys As Boolean = True)
Static Ltry As Double   'Last Time we tried to reconnect GPS
Static Buff As String   'Buffer of Data
Dim Nb As Long          'Number of Bytes
Dim b() As Byte         'Array of Bytes
Dim DT() As String      'GPS Fields

On Error Resume Next
    'If nothing to do
    If sData = "" Then
        Exit Sub
    Else
            '<<<<<<<<<<< ADD BY MSCAR >>>>>>>>>>>>>>>
            'GPSLog sData ' log to a file
            '>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<
            
            'Process Line of Data
            If Left(sData, 1) = "$" Then
                DT = Split(sData, ",")
            
                'Save latest messages to Log in case somebody wants it later
                'NMEAMSGs.Remove DT(0)
                'NMEAMSGs.Add sData, DT(0)
                
                Select Case DT(0)
                    Case "$GPRMC"
                        'Get Lat, Long, Speed and Heading
                        GPS.Lat = CDbl(Left(DT(3), InStr(1, DT(3), ".") - 1))
                        GPS.Lon = CDbl(Left(DT(5), InStr(1, DT(5), ".") - 1))
                        If CommaSys Then
                            'Prepare for Conversions
                            If CommaSys Then DT(3) = Replace(DT(3), ".", ",")
                            If CommaSys Then DT(5) = Replace(DT(5), ".", ",")
                            If CommaSys Then DT(7) = Replace(DT(7), ".", ",")
                            If CommaSys Then DT(8) = Replace(DT(8), ".", ",")
                            'Get Lat/Long
                            GPS.Lat = GPS.Lat \ 100# + (CDbl(Mid(DT(3), InStr(1, DT(3), ",") - 2)) / 60#)
                            GPS.Lon = GPS.Lon \ 100# + (CDbl(Mid(DT(5), InStr(1, DT(5), ",") + -2)) / 60#)
                        Else
                            GPS.Lat = GPS.Lat \ 100# + (CDbl(Mid(DT(3), InStr(1, DT(3), ".") - 2)) / 60#)
                            GPS.Lon = GPS.Lon \ 100# + (CDbl(Mid(DT(5), InStr(1, DT(5), ".") + -2)) / 60#)
                        End If
                        If DT(4) = "S" Then GPS.Lat = -GPS.Lat
                        If DT(6) = "W" Then GPS.Lon = -GPS.Lon
                        GPS.Speed = CDbl(DT(7))
                        If GPS.Speed > 3 Then GPS.Hdg = CInt(DT(8))
                        'If set time from GPS then
                        'If GPSTime And GPS.Valid Then
                        '    'Check for Inverted Date format (stupid GPSs in US date format -- nonstandard)
                        '    DT(0) = "": DT(0) = UseVars("gpsusadate")
                        '    If LCase(DT(0)) = "true" Then DT(9) = Mid(DT(9), 3, 2) + Left(DT(9), 2) + Mid(DT(9), 5)
                        '
                        '    'If time OR date is wrong, set it correctly from GPS
                        '    If Format(DateAdd("h", TimeZone, Now), "HHMM") <> Left(DT(1), 4) Or Format(DateAdd("h", TimeZone, Now), "DDMMYY") <> DT(9) Then
                        '        DT(1) = Format(DateAdd("h", -TimeZone, Mid(DT(9), 3, 2) + "/" + Left(DT(9), 2) + "/" + Mid(DT(9), 5, 2) + " " + Left(DT(1), 2) + ":" + Mid(DT(1), 3, 2) + ":" + Mid(DT(1), 5, 2)), "MM/DD/YY HH:MM:SS")
                        '        Date = Left(DT(1), 8)
                        '        Time = Mid(DT(1), 10)
                        '    End If
                        'End If
                    Case "$GPGGA"
                        'Get Altitude and Sat Count
                        If CommaSys Then DT(9) = Replace(DT(9), ".", ",")
                        GPS.Alt = CDbl(DT(9))
                        GPS.Sats = CInt(DT(7))
                        GPS.Valid = (Val(DT(6)) > 0)
                        
                End Select
            End If
End If
End Sub

I want to parch the data and display as a normal gps displays. but is a all mess i think this lines are no good.
  GPS.Lat = CDbl(Left(DT(3), InStr(1, DT(3), ".") - 1))
                        GPS.Lon = CDbl(Left(DT(5), InStr(1, DT(5), ".") - 1))
                        If CommaSys Then
                            'Prepare for Conversions
                            If CommaSys Then DT(3) = Replace(DT(3), ".", ",")
                            If CommaSys Then DT(5) = Replace(DT(5), ".", ",")GPS.Lat = GPS.Lat \ 100# + (CDbl(Mid(DT(3), InStr(1, DT(3), ",") - 2)) / 60#)
                            GPS.Lon = GPS.Lon \ 100# + (CDbl(Mid(DT(5), InStr(1, DT(5), ",") + -2)) / 60#)
                        Else
                            GPS.Lat = GPS.Lat \ 100# + (CDbl(Mid(DT(3), InStr(1, DT(3), ".") - 2)) / 60#)
                            GPS.Lon = GPS.Lon \ 100# + (CDbl(Mid(DT(5), InStr(1, DT(5), ".") + -2)) / 60#)

what thas this lines do? please comment them.
Thanks for the help

Edited by Jaan, 02 July 2009 - 07:00 AM.
Please use code tags when you are posting your codes!


#2
Vswe

Vswe

    Writes binary right handed and hex left handed

  • Members
  • PipPipPipPipPipPipPipPipPip
  • 9,552 posts
Which vb is this? VB.NET? VB6? Other?

#3
camolas

camolas

    Newbie

  • Members
  • Pip
  • 8 posts
Hi,

Is VB6, please help me on this im 2 months and cant get it.

Thanks for the help

#4
Vswe

Vswe

    Writes binary right handed and hex left handed

  • Members
  • PipPipPipPipPipPipPipPipPip
  • 9,552 posts
I'm not so familiar with VB6 so I can't check if these lines are correct but if they are they doing this:

GPS.Lat = CDbl(Left(DT(3), InStr(1, DT(3), ".") - 1)) 'Adds the value before the dot in DT(3) to GPS.Lat
GPS.Lon = CDbl(Left(DT(5), InStr(1, DT(5), ".") - 1)) 'Adds the value before the dot in DT(5) to GPS.Lon
If CommaSys Then 'If CommaSys is True
    'Prepare for Conversions
    If CommaSys Then DT(3) = Replace(DT(3), ".", ",") 'If CommaSys is True, replace all dots in DT(3) with commas.
    If CommaSys Then DT(5) = Replace(DT(5), ".", ",")GPS.Lat = GPS.Lat \ 100# + (CDbl(Mid(DT(3), InStr(1, DT(3), ",") - 2)) / 60#) 'If CommaSys is True, replace all dots in DT(5) with commas and GPS.Lat's value is dividied with 100 and then the value of DT(3) which is before the comma is dividied with 60 and added to GPS.Lat.
    GPS.Lon = GPS.Lon \ 100# + (CDbl(Mid(DT(5), InStr(1, DT(5), ",") + -2)) / 60#) 'GPS.Lon is dividied with 100 and the value of DT(5) before the comma is dividied with 60 and the added to GPS.Lon
Else 'If CommaSys is False
    GPS.Lat = GPS.Lat \ 100# + (CDbl(Mid(DT(3), InStr(1, DT(3), ".") - 2)) / 60#) 'GPS.Lat is dividied with 100 and the value of DT(3) before the dot is dividied with 60 and the added to GPS.Lat
    GPS.Lon = GPS.Lon \ 100# + (CDbl(Mid(DT(5), InStr(1, DT(5), ".") + -2)) / 60#) 'GPS.Lon is dividied with 100 and the value of DT(5) before the dot is dividied with 60 and the added to GPS.Lon
End If

Hope this will help you.

#5
camolas

camolas

    Newbie

  • Members
  • Pip
  • 8 posts
Hi,

Thanks for the help i will see if i can get it to work.

#6
camolas

camolas

    Newbie

  • Members
  • Pip
  • 8 posts
 

'Reads GPS

Public Sub ReadGPSInfo(ByVal sData As String, Optional CommaSys As Boolean = True)

Static Ltry As Double   'Last Time we tried to reconnect GPS

Static Buff As String   'Buffer of Data

Dim Nb As Long          'Number of Bytes

Dim b() As Byte         'Array of Bytes

Dim DT() As String      'GPS Fields

Dim latitude() As String

On Error Resume Next


    'If nothing to do

    If sData = "" Then

        Exit Sub

    Else


                       'Process Line of Data

            If Left(sData, 1) = "$" Then

                DT = Split(sData, ",")

        

                Select Case DT(0)

                    Case "$GPRMC"

                        'Get Lat, Long, Speed and Heading

                        GPS.Lat = CDbl(Left(DT(3), InStr(1, DT(3), ".") - 1))

                        GPS.Lat = GPS.Lat & CDbl(Right(DT(3), InStr(1, DT(3), ".") - 1))

                   latitude = GPS.Lat '  data is 41097405 in latitude string


Hi,
I have put the data as i wanted 41097405 , now please can some one explain to me how a split the data into to 41'09.7405 from latitude string?

Please help.
Thanks

#7
Vswe

Vswe

    Writes binary right handed and hex left handed

  • Members
  • PipPipPipPipPipPipPipPipPip
  • 9,552 posts
Do you always have 8 digits?

#8
camolas

camolas

    Newbie

  • Members
  • Pip
  • 8 posts
hi,
yes i think sow.
Can you please help?
Thanks

#9
Vswe

Vswe

    Writes binary right handed and hex left handed

  • Members
  • PipPipPipPipPipPipPipPipPip
  • 9,552 posts
Dim Before as string

Dim After as string


Before = 41097405

After = Mid(Before,0,2) & "'" & Mid(Before,2,2) & "." & Mid(Before,4,4)

I can't test if it work, but that would probably work.