program ma mierzyć przebytą drogę na podstawie danych z gps neo6m.
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- $regfile = "m328pbdef.dat"
- $crystal = 16000000
- $baud = 9600
- $hwstack = 64
- $swstack = 64
- $framesize = 64
- $lib "i2c_twi.lib"
- $lib "lcd_i2c_PCF8574.LIB"
- Config Submode = New
- Dim Nmea As String * 80
- Dim Gpsline As String * 80
- Dim Field3 As String * 15
- Dim Field5 As String * 15
- Dim Lat1 As Single , Lon1 As Single
- Dim Lat2 As Single , Lon2 As Single
- Dim Distance As Single , Totaldistance As Single
- Dim Deg As Single , Minval As Single
- Dim Degstr As String * 10
- Dim Minstr As String * 10
- Dim Lenstr As Byte
- Dim Lensub As Byte
- Dim Dlat As Single , Dlon As Single
- Dim A As Single , C As Single
- Dim X As Single
- Dim Pi As Single , R As Single
- Dim P As Byte
- Dim Commacount As Byte
- Dim Startpos As Byte
- Dim Endpos As Byte
- Dim Fieldlen As Byte
- Dim Backlight As Byte : Backlight = 1
- Cls
- Cursor Off
- Open "com1:" For Input As #1
- Pi = 3.14
- R = 6371000
- Do
- If Eof(1) = 0 Then
- Input #1 , Nmea
- If Mid(nmea , 1 , 6) = "$GPRMC" Then
- Gpsline = Nmea
- Commacount = 0
- Startpos = 1
- For P = 1 To Len(gpsline)
- If Mid(gpsline , P , 1) = "," Then
- Incr Commacount
- If Commacount = 3 Then
- Startpos = P
- Incr Startpos
- End If
- If Commacount = 4 Then
- Endpos = P
- Decr Endpos
- Fieldlen = Endpos - Startpos
- Incr Fieldlen
- Field3 = Mid(gpsline , Startpos , Fieldlen)
- End If
- If Commacount = 5 Then
- Startpos = P
- Incr Startpos
- End If
- If Commacount = 6 Then
- Endpos = P
- Decr Endpos
- Fieldlen = Endpos - Startpos
- Incr Fieldlen
- Field5 = Mid(gpsline , Startpos , Fieldlen)
- Exit For
- End If
- End If
- Next
- If Field3 <> "" And Field5 <> "" Then
- Lenstr = Len(field3)
- Lensub = Lenstr
- Lensub = Lensub - 7
- Degstr = Left(field3 , Lensub)
- Minstr = Right(field3 , 7)
- Deg = Val(degstr)
- Minval = Val(minstr)
- Lat2 = Minval / 60
- Lat2 = Lat2 + Deg
- Lenstr = Len(field5)
- Lensub = Lenstr
- Lensub = Lensub - 7
- Degstr = Left(field5 , Lensub)
- Minstr = Right(field5 , 7)
- Deg = Val(degstr)
- Minval = Val(minstr)
- Lon2 = Minval / 60
- Lon2 = Lon2 + Deg
- If Lat1 <> 0 And Lon1 <> 0 Then
- Lat2 = Lat2 * Pi
- Lat2 = Lat2 / 180
- Lat1 = Lat1 * Pi
- Lat1 = Lat1 / 180
- Dlat = Lat2 - Lat1
- Lon2 = Lon2 * Pi
- Lon2 = Lon2 / 180
- Lon1 = Lon1 * Pi
- Lon1 = Lon1 / 180
- Dlon = Lon2 - Lon1
- X = Dlat / 2
- A = Sin(x)
- A = A * A
- X = Cos(lat1)
- X = X * Cos(lat2)
- Dlon = Dlon / 2
- X = X * Sin(dlon)
- X = X * Sin(dlon)
- A = A + X
- X = 1 - A
- X = Sqr(x)
- A = Sqr(a)
- X = A / X
- C = Atn(x)
- C = C * 2
- Distance = R * C
- Totaldistance = Totaldistance + Distance
- End If
- Lat1 = Lat2
- Lon1 = Lon2
- Cls
- Locate 1 , 1
- Lcd "Dystans (m):"
- Locate 2 , 1
- Lcd Fusing(distance , "#.##")
- Locate 3 , 1
- Lcd "Calkowity:"
- Locate 4 , 1
- Lcd Fusing(totaldistance , "#.##")
- End If
- End If
- End If
- Loop
- End
