GPS UAV, Latitude,Longitude, Speed, Heading, GPS Fix, No.Of Sats. HDOP

Dependencies:   mbed

/media/uploads/Rbinas/gpswiring_gZfl7BZ.jpg /media/uploads/Rbinas/gps.jpg

Files at this revision

API Documentation at this revision

Comitter:
Rbinas
Date:
Sun Feb 24 02:01:36 2019 +0000
Parent:
0:8508616aa661
Commit message:
Rev 0

Changed in this revision

GPSUAV.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r 8508616aa661 -r ae1120188730 GPSUAV.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GPSUAV.h	Sun Feb 24 02:01:36 2019 +0000
@@ -0,0 +1,160 @@
+#ifndef GPSUAV_H_
+#define GPSUAV_H_
+
+#include "mbed.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+Serial gps(p28, p27);  // TX, RX GPS
+Serial pc(USBTX, USBRX);// TX, RX
+char s[85];
+char y1,y2,y3,y4,y5,y6,y7,y8,y9;
+char x1,x2,x3,x4,x5,x6,x7,x8,x9,x10;
+char NS,WE;
+char GPSBuffer[85];
+char Latitude[10];
+char Longitude[11];
+
+char spd1,spd2,spd3,spd4,spd5,spd6,spd7;
+char speed[8];
+float speedInt;
+
+char hdg1,hdg2,hdg3,hdg4,hdg5;
+char HDG[5];
+char Heading[6];
+float HeadingInt;
+
+char GpsFix[2];
+char GF;
+int GFInt;
+char NOS[3];
+char Nos1,Nos2;
+int NOSInt;
+char HDOP[6];
+char Hdp1,Hdp2,Hdp3,Hdp4,Hdp5;
+float HDOPInt;
+
+char LatDeg[3];
+char LatMin[8];
+int LatDegInt;
+float LatMinInt;
+
+char LongDeg[4];
+char LongMin[8];
+int LongDegInt;
+float LongMinInt;
+void wait_ms(int us);
+
+void EnableGPS()
+{
+        pc.baud(9600); 
+        GPSBuffer[0] = '\0';
+        while (1) {
+            char c = gps.getc();         
+            s[0] = c;
+            s[1] = '\0';
+            strcat(GPSBuffer, s);
+            if (c == '\n') {
+                break;
+            }
+  if ((GPSBuffer[1] == 'G') && (GPSBuffer[2] == 'N') && (GPSBuffer[3] == 'R') && (GPSBuffer[4] == 'M') && (GPSBuffer[5] == 'C')&& (GPSBuffer[17] == 'A'))
+  { // $GNRMC,174216.00,A,3908.86289,N,07647.84392,W,2.419,237.21,210219,,,A*6E
+     
+    //Latitude---------------------------------------------------------------------------------------------------------------
+    y1= GPSBuffer[19]; y2 = GPSBuffer[20]; //Degrees
+    y3= GPSBuffer[21]; y4 = GPSBuffer[22];y5= GPSBuffer[24]; y6 = GPSBuffer[25];y7= GPSBuffer[26]; y8 = GPSBuffer[27];y9= GPSBuffer[28]; //DEGMIN
+    NS = GPSBuffer[30];
+    
+    sprintf(LatDeg,"%c%c",y1,y2);
+    sprintf(LatMin,"%c%c%c%c%c%c%c",y3,y4,y5,y6,y7,y8,y9);
+    
+    LatDegInt = atoi(LatDeg);
+    LatMinInt = atoi(LatMin);
+    LatMinInt = LatMinInt/100000;
+  //---------------------------------------------------------------- 
+    //Longitude 
+    x1= GPSBuffer[32]; x2= GPSBuffer[33]; x3= GPSBuffer[34];//Degrees
+    x4=GPSBuffer[35]; x5=GPSBuffer[36]; x6=GPSBuffer[38]; x7=GPSBuffer[39]; x8=GPSBuffer[40]; x9=GPSBuffer[41];x10=GPSBuffer[42];//DEGMIN
+    WE=GPSBuffer[44];
+       
+    sprintf(LongDeg,"%c%c%c",x1,x2,x3);
+    sprintf(LongMin,"%c%c%c%c%c%c%c",x4,x5,x6,x7,x8,x9,x10);
+    
+    LongDegInt = atoi(LongDeg);
+    LongMinInt = atoi(LongMin);
+    LongMinInt = LongMinInt/100000;
+               
+ //--------------------------------------------get speed------------------------------------------------------------------
+  if((GPSBuffer[47] == '.')&& (GPSBuffer[51] == ','))//2.419
+   {
+    spd1=GPSBuffer[46]; spd2=GPSBuffer[47]; spd3=GPSBuffer[48]; spd4=GPSBuffer[49]; spd5=GPSBuffer[50];      
+    sprintf(speed,"00%c%c%c%c%c",spd1,spd2,spd3,spd4,spd5);     
+   }   
+  if((GPSBuffer[48] == '.')&& (GPSBuffer[52] == ','))//24.191
+   {
+    spd1=GPSBuffer[46]; spd2=GPSBuffer[47]; spd3=GPSBuffer[48]; spd4=GPSBuffer[49]; spd5=GPSBuffer[50]; spd6=GPSBuffer[51];      
+    sprintf(speed,"0%c%c%c%c%c%c",spd1,spd2,spd3,spd4,spd5,spd6);     
+   }
+  if((GPSBuffer[49] == '.')&& (GPSBuffer[53] == ','))//240.191
+   {
+    spd1=GPSBuffer[46]; spd2=GPSBuffer[47]; spd3=GPSBuffer[48]; spd4=GPSBuffer[49]; spd5=GPSBuffer[50]; spd6=GPSBuffer[51]; spd7=GPSBuffer[52];    
+    sprintf(speed,"%c%c%c%c%c%c%c",spd1,spd2,spd3,spd4,spd5,spd6,spd7);     
+   }
+    speedInt = atof(speed); //speed in knots
+ 
+//----------------------------------------get Heading-------------------------------------------------------------------
+ }
+ if ((GPSBuffer[1] == 'G') && (GPSBuffer[2] == 'N') && (GPSBuffer[3] == 'V')&& (GPSBuffer[4] == 'T')&& (GPSBuffer[5] == 'G'))//MC Sentence
+{
+   
+   if((GPSBuffer[8] == '.')&& (GPSBuffer[10] == ','))//2.4
+   {
+    hdg1=GPSBuffer[7]; hdg2=GPSBuffer[8]; hdg3=GPSBuffer[9];  
+    sprintf(Heading,"00%c%c%c",hdg1,hdg2,hdg3);     
+   }
+    if((GPSBuffer[9] == '.')&& (GPSBuffer[11] == ','))//20.4
+   {
+    hdg1=GPSBuffer[7]; hdg2=GPSBuffer[8]; hdg3=GPSBuffer[9]; hdg4=GPSBuffer[10];    
+    sprintf(Heading,"0%c%c%c%c",hdg1,hdg2,hdg3,hdg4);     
+   }
+   if((GPSBuffer[10] == '.')&&(GPSBuffer[12] == ','))//200.4
+   {
+    hdg1=GPSBuffer[7]; hdg2=GPSBuffer[8]; hdg3=GPSBuffer[9]; hdg4=GPSBuffer[10]; hdg5=GPSBuffer[11];  
+    sprintf(Heading,"%c%c%c%c%c",hdg1,hdg2,hdg3,hdg4,hdg5);     
+   }
+    HeadingInt=atof(Heading);
+}
+if ((GPSBuffer[1] == 'G') && (GPSBuffer[2] == 'N') && (GPSBuffer[3] == 'G')&& (GPSBuffer[4] == 'G')&& (GPSBuffer[5] == 'A'))//MC Sentence
+{  //$GNGGA,193247.00,3908.85437,N,07647.82746,W,1,11,0.86,50.0,M,-34.7,M,,*4E start at 44
+ 
+     GF=GPSBuffer[44];
+     sprintf(GpsFix,"%c",GF);
+     GFInt = atoi(GpsFix);//gpsfix
+     
+     Nos1=GPSBuffer[46];
+     Nos2=GPSBuffer[47];
+     sprintf(NOS,"%c%c",Nos1,Nos2);//number of sats
+     NOSInt = atoi(NOS);
+         
+    if((GPSBuffer[50] == '.')&& (GPSBuffer[53] == ','))//0.66
+   {
+      Hdp1=GPSBuffer[49]; Hdp2=GPSBuffer[50]; Hdp3=GPSBuffer[51]; Hdp4=GPSBuffer[52]; 
+      sprintf(HDOP,"0%c%c%c%c", Hdp1,Hdp2,Hdp3,Hdp4);  
+   }
+    if((GPSBuffer[51] == '.')&& (GPSBuffer[54] == ','))//00.66
+   {
+      Hdp1=GPSBuffer[49]; Hdp2=GPSBuffer[50]; Hdp3=GPSBuffer[51]; Hdp4=GPSBuffer[52];Hdp5=GPSBuffer[53];
+      sprintf(HDOP,"%c%c%c%c%c",Hdp1,Hdp2,Hdp3,Hdp4,Hdp5);  
+   }
+     HDOPInt = atof(HDOP);//hdop
+}  
+}
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // #ifndef GPSUAV_H_
\ No newline at end of file
diff -r 8508616aa661 -r ae1120188730 main.cpp
--- a/main.cpp	Wed May 02 03:53:27 2018 +0000
+++ b/main.cpp	Sun Feb 24 02:01:36 2019 +0000
@@ -1,50 +1,25 @@
 #include "mbed.h"
+#include "GPSUAV.h"
 //Board:mbed LPC1768
-//Veriy GPS Lat/Long buffer Data from GNRMC sentence.If using Nema 0183 GPS, Change GNRMC to GPRMC
-//GPS Receiver: HolyBro
-//Wait until you get a good fix
-Serial gps(p9, p10);       // TX, RX
-Serial pc(USBTX, USBRX);    // TX, RX
 DigitalOut led1(LED1);
+//Altitude not included, deemed unreliable for UAV appliations. Use Pitot tube or AGL.
 
-char s[82];
-char y1,y2,y3,y4,y5,y6,y7,y8,y9;
-char x1,x2,x3,x4,x5,x6,x7,x8,x9,x10;
-char NS,WE;
-char GPSBuffer[1024];
-
+//---------------------------------------------------------------
 int main() {
-    pc.baud(9600);
-    
-   // char gpsout[1024];
+      
     while (1) {
-        GPSBuffer[0] = '\0';
-        while (1) {
-            char c = gps.getc();
-           // char s[2];
-            s[0] = c;
-            s[1] = '\0';
-            strcat(GPSBuffer, s);
-            if (c == '\n') {
-                break;
-            }
-            
-if ((GPSBuffer[1] == 'G') && (GPSBuffer[2] == 'N') && (GPSBuffer[3] == 'R') && (GPSBuffer[4] == 'M') && (GPSBuffer[5] == 'C'))//GNRMC Sentence
-  {
-    //Latitude
-    y1= GPSBuffer[19]; y2 = GPSBuffer[20]; //Degrees
-    y3= GPSBuffer[21]; y4 = GPSBuffer[22];y5= GPSBuffer[24]; y6 = GPSBuffer[25];y7= GPSBuffer[26]; y8 = GPSBuffer[27];y9= GPSBuffer[28]; //DEGMIN
-    NS = GPSBuffer[30];
-    //Longitude 
-    x1= GPSBuffer[32]; x2= GPSBuffer[33]; x3= GPSBuffer[34];//Degrees
-    x4=GPSBuffer[35]; x5=GPSBuffer[36]; x6=GPSBuffer[38]; x7=GPSBuffer[39]; x8=GPSBuffer[40]; x9=GPSBuffer[41];x10=GPSBuffer[42];//DEGMIN
-    WE=GPSBuffer[44];
+     
+    EnableGPS();   
+     pc.printf("%02d ",LatDegInt); pc.printf("%08.5f",LatMinInt);pc.printf("%c ",NS);//latitude
+      pc.printf("%03d ",LongDegInt);pc.printf("%08.5f",LongMinInt);pc.printf("%c",WE);//longitude
+      pc.printf(" %07.3f",speedInt);//speed
+      pc.printf(" %05.1f",HeadingInt);//heading
+      pc.printf(" %1d",GFInt);//gpsfix
+      pc.printf(" %02d",NOSInt);//number of sats
+      pc.printf(" %05.2f\n",HDOPInt);//hdop
+             
+      led1 = !led1;
+   
   }
-        }
-        
-     pc.printf("Latitude:%c%c:%c%c.%c%c%c%c%c %c",y1,y2,y3,y4,y5,y6,y7,y8,y9,NS); //Print latitude buffer data
-     pc.printf(" Longitude:%c%c%c:%c%c.%c%c%c%c%c %c\r\n",x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,WE); //Print Longitude buffer data
    
-    led1 = !led1;
-    }
 }