Ricardo Binas
/
GPSUAV
GPS UAV, Latitude,Longitude, Speed, Heading, GPS Fix, No.Of Sats. HDOP
Revision 1:ae1120188730, committed 2019-02-24
- 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 |
--- /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
--- 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; - } }