Read GPS satellite fix, latitude, longitude, MSL altitude, speed (Km/Hour) over ground coordinates and heading (0-360deg).

Dependencies:   Adafruit_FONA_SIMCOM_Library mbed

main.cpp

Committer:
213468891
Date:
2018-09-28
Revision:
0:4c181b7daee9

File content as of revision 0:4c181b7daee9:

/*#################################################################################

Program Name    : SIM808 GPS 
Author          : Crispin Mukalay
Date Modified   : 31/08/2018
Compiler        : ARMmbed
Tested On       : NUCLEO-F446RE

Description     : Demonstrates the use of the SIM808 Shield to read the GPS
                  satellite fix, latitude, longitude, MSL altitude, 
                  speed (Km/Hour) over ground coordinates and heading (0-360deg).
                  
Requirements    : * NUCLEO-F446RE Board
                  * SIM808 GSM/GPS Module
              
Circuit         : * The SIM808 module is connected as follows:
                    VCC/5V/VIN                      -   5V
                    GND                             -   GND
                    RXD                             -   PA0 (F446's Serial4_TX pin)
                    TXD                             -   PA1 (F446's Serial4_RX pin)

####################################################################################*/

#include "mbed.h"
#include "Adafruit_FONA.h"

Adafruit_FONA gps(PA_0, PA_1, PA_6, PA_7);     //Create a Adafruit_FONA object called gps
//                TX    RX    RST    RI
//Not all SIM808-based boards have a RST (Reset) and RI (Ring Indicator) pin,
//but when initializing the object one needs to specify them, even if they
//are not there.  In our case we just used two unused pins (PA_6 & PA_7) as "dummy" pins.

Serial pc(SERIAL_TX, SERIAL_RX);    //to use the PC as a console (display output)

int main() {
    
    int SIM808Success;
    bool gpsSuccess, gpsCoordinates;
    float fix, latitude, longitude, MSL_altitude, speed_kph, heading;
      
    pc.printf("Program Started...\n");
    
    /* create connection to SIM808 */
    pc.printf("\nConnecting to SIM808...\n");
    SIM808Success = gps.begin(9600);              //connect to SIM808 device at 9600 baud rate and return if successful(=1) or not (=0) 
    
    if(SIM808Success == 1) 
        pc.printf("\nSIM808 detected successfully...\n");
    else {
        pc.printf("\nSIM808 not detected!\n");
        while(1);                           //program stops/freezes at this point if SIM808 not detected
    }
    
    /* Enable GPS*/
    gpsSuccess = gps.enableGPS(true);
     
    if (gpsSuccess == true) 
       pc.printf("\nGPS enable successful...\n");
    else
       pc.printf("\nGPS enable failed!\n");
    
    
    while(1) {
        wait(2);
        
        /* Read coordinates from GPS*/
        gpsCoordinates = gps.getGPS(&fix, &latitude, &longitude, &MSL_altitude, &speed_kph, &heading);
        
        if(gpsCoordinates == true){
            
            if(fix == 1.0f){
                pc.printf("\n");
                pc.printf("Latitude: %.6f\n", latitude);
                pc.printf("Longitude: %.6f\n", longitude);
                pc.printf("MSL altitude: %.6f\n", MSL_altitude);
                pc.printf("Speed: %.6f kph\n", speed_kph);
                pc.printf("Heading: %.6f \n", heading);
            }else{
                pc.printf("Waiting for satellite fix...\n");
            }
                 
        }else{
            pc.printf("Waiting for satellite fix...\n");
        }
    }
}