test code

Dependencies:   TextLCD mbed

Fork of GPS_U-blox_NEO-6M_Test_Code by Edoardo De Marchi

main.cpp

Committer:
renanbmx123
Date:
2018-05-25
Revision:
2:4cc7f42f94c1
Parent:
1:acd907fbcbae

File content as of revision 2:4cc7f42f94c1:

/*
 * Author: Renan
 * Date: 27-02-18
 * Notes: Firmware for GPS GP 735T
*/
 
#include "mbed.h"
#include <stdio.h>
#include "TextLCD.h"

int dateRef = 90318;
 
Serial pc(USBTX,USBRX);
Serial gps(p9, p10);
TextLCD lcd(p11, p12, p15, p16, p29, p30); // rs, e, d4, d5, d6, d7

void Init()
{
    gps.baud(9600);
    pc.baud(9600);
   
}

int getGPS(char* cDataBuffer,float *lat,float *lon,float *tmf,float *spd, int  *dat, char *ns, char *ew, char *stat)
{
    char nortSouth, eastWest, status;
    int  date,fq, nst;                                     // fix quality, Number of satellites being tracked, 3D fix
    float latitude, longitude, timefix, speed,altitude;
       
    if(strncmp(cDataBuffer,"$GPRMC", 6) == 0) 
    {
        sscanf(cDataBuffer, "$GPRMC,%f,%c,%f,%c,%f,%c,%f,,%d", &timefix, &status, &latitude, &nortSouth, &longitude, &eastWest, &speed, &date);     
        
        if (latitude !=0)
            *lat = latitude;
        if (longitude != 0)
            *lon = longitude;
        
        *tmf = timefix;
        
        *spd = speed;
        if (date >= dateRef)
            *dat = date;

        if (nortSouth == 'N' | nortSouth == 'S')
            *ns = nortSouth;
        if (eastWest == 'W' | eastWest == 'E')
            *ew = eastWest;
        *stat = status;
        // pc.printf("GPRMC Fix: %f, Status: %c, Latitude: %f %c, Longitude: %f %c, Speed: %f, Date: %d\n", timefix, status, latitude, nortSouth, longitude, eastWest, speed, date);
        // pc.printf("GPRMC Fix: %f, Status: %c, Latitude: %f %c, Longitude: %f %c, Speed: %f, Date: %d\n", *tmf, *stat, *lat, *ns, *lon, *ew, *spd, *dat);
        return 0;
    }
    if(strncmp(cDataBuffer,"$GPGLL", 6) == 0) 
    {
        sscanf(cDataBuffer, "$GPGLL,%f,%c,%f,%c,%f", &latitude, &nortSouth, &longitude, &eastWest, &timefix);
        //pc.printf("%s",cDataBuffer); 
        if (latitude !=0)
            *lat = latitude;
            
        if (longitude != 0)
            *lon = longitude;
            
        *tmf = timefix;
        *spd = speed;
        
        if (nortSouth == 'N' | nortSouth == 'S')
            *ns = nortSouth;
            
        if (eastWest == 'W' | eastWest == 'E')
            *ew = eastWest;
        return 0;
    }
   
    if(strncmp(cDataBuffer,"$GPGGA", 6) == 0) 
    {
        sscanf(cDataBuffer, "$GPGGA,%f,%f,%c,%f,%c,%d,%d,%*f,%f", &timefix, &latitude, &nortSouth, &longitude, &eastWest, &fq, &nst, &altitude);
        if (latitude !=0)
            *lat = latitude;
            
        if (longitude != 0)
            *lon = longitude;
            
        //*alt = altitude; 
        *tmf = timefix;
        
        if (nortSouth == 'N' | nortSouth == 'S')
            *ns = nortSouth;
            
        if (eastWest == 'W' | eastWest == 'E')
            *ew = eastWest;
        return 0;
                
    }
    return -1;


}

 
int main() 
{   
    Init();
    char Buffer[128],str[7];
    char ns, ew, status;
    int  date,gpsACK;                                     // fix quality, Number of satellites being tracked, 3D fix
    float latitude, longitude, timefix, speed;
    memset(Buffer,0,sizeof(Buffer));
    date = 0;
    latitude = longitude = timefix = speed = 0;
    ns = ew = status =0;

    while(true) 
    {
        if(gps.readable())
        {
            gps.gets(Buffer,90);
            if(Buffer[0] == '$'){
                memcpy(str,Buffer, 6);
                //printf("\nrecv: %s\n",str);
                gpsACK = getGPS(Buffer, &latitude, &longitude, &timefix, &speed, &date, &ns, &ew, &status);
                
                }
        }    
      
        if (gpsACK == 0)
        {
            lcd.printf("HORA:%d\n",(int)timefix); 
            lcd.printf("DATA:%d\n",date); 
            pc.printf("GPRMC Fix: %f, Status: %c, Latitude: %f %c, Longitude: %f %c, Speed: %f, Date: %d\n", timefix, status, latitude, ns, longitude, ew, speed, date);
            wait(.2);
           /* lcd.cls();
            lcd.printf("LATITUDE:\n%f %c ",latitude,ns);
            wait(2);
            lcd.cls();
            lcd.printf("LONGITUDE:\n%f %c ",longitude,ew); 
            wait(2);*/
        }
            
       
    }    
}