A GPS serial interrupt service routine that has an on the fly nmea parser. Works with a STM32F411RE and a Adafruit GPS logger.

Dependents:   Bicycl_Computer_NUCLEO-F411RE Bicycl_Computer_NUCLEO-L476RG

Fork of GPS by Simon Ford

main.cpp

#include "mbed.h"
#include "GPSISR.h"

#define PIN_RX_GPS      PA_12 //GPS Shield RX pin
#define PIN_TX_GPS      PA_11 //GPS Shield TX pin
Serial pc(USBTX, USBRX);

// Set up serial interrupe service handler for gps characters.
GPS MyGPS(PIN_TX_GPS,PIN_RX_GPS, 9600);
int main()
{
    while (1) {
	if (MyGPS.dataready()) {
					MyGPS.read();
					pc.printf("NMEA has valid data");
					pc.printf("Sats : %d \n", MyGPS.buffer.satellites);
					pc.printf("%d-%d-%d\n", MyGPS.buffer.month, MyGPS.buffer.day, MyGPS.buffer.year);
					pc.printf("%d:%d:%d\n", MyGPS.buffer.hours, MyGPS.buffer.minutes, MyGPS.buffer.seconds);
	}
	else {
                pc.printf("NMEA has no valid data");
	}   
   }  
} 
Revision:
3:e64b8be9ce92
Parent:
2:dbc6c0789611
Child:
4:7240a18102a6
--- a/GPSISR.cpp	Thu Feb 16 23:55:28 2017 +0000
+++ b/GPSISR.cpp	Fri Feb 17 23:31:39 2017 +0000
@@ -19,6 +19,8 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  * THE SOFTWARE.
  */
+ 
+#include <string> 
 #include "nmea.h"
 #include "GPSISR.h"
 
@@ -52,10 +54,27 @@
     interrupt = 0;
     return;
 }
- bool GPS::isdatardy(void){
+ bool GPS::dataready(void){
  return  nmea.isdataready();
      
 }     
-int GPS::getSats(void){
-    return nmea.getSatellites();
-}    
\ No newline at end of file
+
+void GPS::read(void) {
+    
+    buffer.hour = nmea.getHour();
+    buffer.minutes = nmea.getMinute();
+    buffer.day = nmea.getDay();
+    buffer.month = nmea.getMonth();
+    buffer.year = nmea.getYear();
+    buffer.latitude = 0.0;
+    buffer.longitude = 0.0;
+
+    if (nmea.isdataready()) {
+        buffer.latitude = nmea.getLatitude();
+        buffer.longitude = nmea.getLongitude();
+        buffer.speed = nmea.getSpeed();
+        buffer.altitude = nmea.getAltitude();
+        buffer.bearing = nmea.getBearing();
+        buffer.satellites = nmea.getSatellites();
+    }
+}
\ No newline at end of file