GPS program used with the STM32 L152RE and any NMEA GPS

Dependencies:   SerialGPS mbed

Fork of Sparkfun_GPS_Shield by Shields

Revision:
2:5eb57d412bf2
Parent:
1:6bba24a04008
--- a/main.cpp	Fri Jul 25 12:25:21 2014 +0000
+++ b/main.cpp	Wed Jan 13 15:32:23 2016 +0000
@@ -18,27 +18,69 @@
 
 #include "mbed.h"
 #include "SerialGPS.h"
+#include "math.h"
+
+#ifndef M_PI
+   #define M_PI 3.14159265358979323846
+#endif
+
+//Various interruption process
+Ticker toggler;            // periodic interrupt routines
+//Timer debounce;             // define debounce timer
 
 /** On many platforms USBTX/USBRX overlap with serial on D1/D0 pins and enabling the below will interrupt the communication.
  *  You can use an LCD display to print the values or store them on an SD card etc.
  */
-//Serial pc(USBTX, USBRX);
+Serial pc(USBTX, USBRX);
 
 /**
- * D1 - TX pin (RX on the GPS module side)
- * D0 - RX pin (TX on the GPS module side)
- * 4800 - GPS baud rate
+ * PC_10 - TX pin (RX on the GPS module side)
+ * PC_11 - RX pin (TX on the GPS module side)
+ * 9600 - GPS baud rate
  */
-SerialGPS gps(D1, D0, 4800);
+SerialGPS gps(PC_10, PC_11, 9600);
+
+void toggle_gps(){
+    int i=0;
+    while(1){
+        //pc.printf("gps.sample?\n\r");
+        if (gps.sample()) {
+            i++;
+            //pc.printf("true\n\r");
+            pc.printf("sats %d, lat %f, lont %f, alt %f, geoid %f, time %f\n\r", gps.sats, gps.latitude, gps.longitude, gps.alt, gps.geoid, gps.time);
+            break;
+        }
+    }
+    
+}
 
-DigitalOut myled(LED1);
+float DegToRad(float valDeg){
+    return M_PI*valDeg/180;
+}
+
+double distance(float rxLat, float rxLong){
+    double a=0, c=0;
+    int R=6371000;
+    
+    double deltaLong=abs(DegToRad(rxLong)-DegToRad(gps.longitude));
+    double deltaLat=abs(DegToRad(rxLat)-DegToRad(gps.latitude));
+    
+    a=sin(deltaLat/2)*sin(deltaLat/2)+cos((double)DegToRad(rxLat))*cos((double)DegToRad(gps.latitude))*sin(deltaLong/2)*sin(deltaLong/2);
+    c=2*atan2(sqrt(a), sqrt(1-a));
+    
+    return R*c;
+    }
 
 int main() {
-    while (1) {
-        if (gps.sample()) {
-            myled = myled ? 0 : 1;
-            printf("sats %d, long %f, lat %f, alt %f, geoid %f, time %f\n\r", gps.sats, gps.longitude, gps.latitude, gps.alt, gps.geoid, gps.time);
-            wait(1);
-        }
-    }
+    /*
+    int i=0,k;
+    double distance;
+    float sleep=20.0;
+    toggler.attach(&toggle_gps,sleep);
+    */
+    gps.latitude=43.615659;
+    gps.longitude=7.072609;
+    pc.printf("La distance entre les deux points est de: %f", distance(43.616541,7.070429));
+    while(1);
+   
 }
\ No newline at end of file