RP Store Tìm linh kiện theo mã, gửi BOM nhận báo giá Gửi BOM

Need help with Sim908 GPS code

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • mastero
    Nhập môn đệ tử
    • May 2012
    • 1

    #1

    Need help with Sim908 GPS code

    Hello friends,

    I am building a SIM908 GPS module with SMS control.

    The problem i am facing is i need to convert deg min.min latidude to deg decimal.

    I have the formula but dont know how to put it in the code

    This is what the GPS module sends 4,1234.123456,N,7890.123456,E,123123.000,A,A

    I can receive it and resend it as it is with the below code but i need some maths to be done before sending.

    eg: 1234.123456 div by 100 = 12.34123456

    Once i have this i need to divide the numbers on the right of the decimal by 60

    eg: 34123456 div by 60 = 568724.266666

    now i want this number to be sent out 12.568724

    How can i do it below is my code.

    ************************************************** ***********

    'Gps Read And Write SIM908
    '**********************************
    TRISA = %00000000
    TRISB = %00000000
    TRISC = %11000000

    CMCON = %00000111 'turn off comparators 16F876A
    ADCON1 = %00000110 'turn off analog inputs 16F876A

    'Declare variables
    Dim i As Word
    Dim j As Byte
    Dim k As Byte
    Dim x As Byte
    Dim y As Byte
    Dim n As Byte
    Dim a As Byte
    Dim h As Byte
    Dim t As Byte

    Dim temp As Byte
    Dim data(64) As Byte 'buffer for serial data
    Dim serdata As Byte
    Dim startmark As Bit
    Dim gpsreceived As Bit

    '************************************************* ****

    'Definition of OUTPUTS ports

    Symbol led = PORTC.4 'status LED
    led = 0
    WaitMs 3000

    '**** MAIN PROGRAM ****
    main:
    led = 1

    Hseropen 9600 'initialize serial hw port - port used for modem
    Gosub wait
    Hserout "AT+CGPSPWR=1", CrLf 'start gps
    Gosub wait
    Hserout "AT+CGPSRST=1", CrLf 'reset gps
    Gosub wait

    '********** Main loop ******************
    menu:
    WaitMs 500 'waiting time
    Gosub get_location
    Gosub send_location
    Toggle led
    Goto menu
    End


    get_location:
    '***********************************
    h = 0
    i = 0
    k = 0
    startmark = False
    gpsreceived = False

    Hserout "AT+CGPSINF=4", CrLf 'CODE TO RECEIVE GPS INFO

    loop1:
    Gosub hserget2
    If serdata > 0 Then
    If serdata = "4" Then
    gpsreceived = True
    Endif
    If serdata = 0x2c And gpsreceived = True Then
    startmark = True
    Endif
    temp = LookUp(0x2c, 0x4e), k 'search for , And Then For N
    If serdata = temp Then
    k = k + 1
    If k = 2 Then
    Return
    Endif
    Endif
    If startmark = True Then
    data(h) = serdata 'store data in buffer
    If h = 64 Then 'handle buffer overflow
    h = 0
    Else
    h = h + 1
    Endif
    Endif
    Endif
    i = i + 1
    If i = 65000 Then Return 'timeout
    Goto loop1


    send_location:
    '***********************************
    If h > 0 Then
    h = h - 1 'number of digits
    For k = 1 To h Step 1
    temp = data(k)
    If temp = 0x2c Then
    Hserout 0x1a, CrLf
    For k = 0 To 40 Step 1
    data(k) = 0x00
    Next k
    Return
    Endif
    Hserout temp
    Next k

    Endif
    Return

    wait:
    '*******************************************
    WaitMs 350
    Return

    hserget2:

    hserget serdata

    Return

    ************************************************** ***********
    Any help will be nice.

    Matero
  • 044hnoor
    Nhập môn đệ tử
    • Feb 2015
    • 1

    #2
    Once i have this i need to divide the numbers on the right of the decimal by 60

    eg: 34123456 div by 60 = 568724.266666

    now i want this number to be sent out 12.568724

    How can i do it below is my code.
    NOOR

    Comment

    • letho123
      Nhập môn đệ tử
      • May 2016
      • 3

      #3
      Đây là một câu hỏi tiếng anh khá là khó luôn @@
      vay tin chap - vay tien nhanh - vay von ngan hang

      Comment

      Working...