GPS How to receive NMEA Data over a serial-port with MVCom

Share your advanced PureBasic knowledge/code with the community.
clipper
User
User
Posts: 44
Joined: Fri Aug 29, 2003 7:47 am
Location: Germany

GPS How to receive NMEA Data over a serial-port with MVCom

Post by clipper »

Code updated For 5.20+ (same As SerialPort Libary)

Code: Select all

; Simple Example to receive NMEA-Sentences over Com1 with PureBasic and the 
; MVCom Library of Marc Vitry http://www.purearea.net/pb/download/userlibs/MVCOM_LIBRARY.zip
; by Thomas Ott - tom@medi-a.de
; Information about the NMEA-Protocoll   http://www.nmea.de/nmea0183datensaetze.html

#FRAME_1 = 0
#TEXT_1 = 1
#TEXT_2 = 2
#FRAME_2 = 3
#BUTTON_1 = 4
#BUTTON_2 = 5
#LISTVIEW_1=6
#Window_0=0

Global HCom.l
Global NMEA.s
ComPortSettings.s="COM1:4800,N,8,1"

Procedure TimerProc(WindowID.l, nIDEvent.l, uElapse.l, lpTimerFunc.l)
  If HCom > 0
    Car.s = "."
    While ComInputBufferCount(HCom) > 0
      If ComInput(HCom,Car)
        If Car=Chr(10)
          AddGadgetItem(#LISTVIEW_1, -1,NMEA)
          If Left(NMEA,6)= "$GPGLL"
            SetGadgetText(#TEXT_1,StringField(NMEA,2,",")+StringField(NMEA,3,","))
            SetGadgetText(#TEXT_2,StringField(NMEA,4,",")+StringField(NMEA,5,","))
          EndIf
          NMEA=""
        Else
          NMEA=NMEA+Car
        EndIf
      EndIf
    Wend
  EndIf
EndProcedure

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 435, 369, 300,130, "NMEA",#PB_Window_SystemMenu | #PB_Window_TitleBar )
    
    FrameGadget3D(#FRAME_1, 0, 0, 100, 20,"")
    TextGadget(#TEXT_1, 3, 3, 90, 15, "", #PB_Text_Center)
    TextGadget(#TEXT_2, 103, 3, 90, 15, "", #PB_Text_Center)
    FrameGadget3D(#FRAME_2, 101, 0, 100, 20, "")
    ButtonGadget(#BUTTON_1, 201, 0, 50, 20, "Start")
    ButtonGadget(#BUTTON_2, 250, 0, 50, 20, "Clear")
    ListViewGadget(#LISTVIEW_1, 0, 20, 300, 110)
  EndIf
EndProcedure

Open_Window_0()
SetTimer_(WindowID(#Window_0),1,100,@TimerProc())
Repeat
  Event = WaitWindowEvent()
  If Event = #PB_Event_Gadget
    GadgetID = EventGadget()
    Select GadgetID
      Case #BUTTON_1
        If HCom > 0
          ComClose(HCom)
          HCom=0
          SetGadgetText(#BUTTON_1,"Start")
        Else
          HCom=ComOpen(ComPortSettings,0,256,0)
          If HCom=-1
            MessageRequester("NMEA","Error opening the ComPort",0)
          Else
            SetGadgetText(#BUTTON_1,"Stop")
          EndIf
        EndIf
      Case #BUTTON_2
        ClearGadgetItemList(#LISTVIEW_1)
    EndSelect
  EndIf
Until Event = #PB_Event_CloseWindow

KillTimer_(WindowID(#Window_0),1)
If HCom > 0
  ComClose(HCom)
EndIf
End
Tranquil
Addict
Addict
Posts: 952
Joined: Mon Apr 28, 2003 2:22 pm
Location: Europe

Post by Tranquil »

Oh dear, this is exactly what I searched for some months ago!

Thanks a lot for sharing this great code!

Mike
Tranquil
Post Reply