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

Committer:
Rbinas
Date:
Sun Feb 24 02:01:36 2019 +0000
Revision:
1:ae1120188730
Rev 0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rbinas 1:ae1120188730 1 #ifndef GPSUAV_H_
Rbinas 1:ae1120188730 2 #define GPSUAV_H_
Rbinas 1:ae1120188730 3
Rbinas 1:ae1120188730 4 #include "mbed.h"
Rbinas 1:ae1120188730 5
Rbinas 1:ae1120188730 6 #ifdef __cplusplus
Rbinas 1:ae1120188730 7 extern "C" {
Rbinas 1:ae1120188730 8 #endif
Rbinas 1:ae1120188730 9
Rbinas 1:ae1120188730 10 Serial gps(p28, p27); // TX, RX GPS
Rbinas 1:ae1120188730 11 Serial pc(USBTX, USBRX);// TX, RX
Rbinas 1:ae1120188730 12 char s[85];
Rbinas 1:ae1120188730 13 char y1,y2,y3,y4,y5,y6,y7,y8,y9;
Rbinas 1:ae1120188730 14 char x1,x2,x3,x4,x5,x6,x7,x8,x9,x10;
Rbinas 1:ae1120188730 15 char NS,WE;
Rbinas 1:ae1120188730 16 char GPSBuffer[85];
Rbinas 1:ae1120188730 17 char Latitude[10];
Rbinas 1:ae1120188730 18 char Longitude[11];
Rbinas 1:ae1120188730 19
Rbinas 1:ae1120188730 20 char spd1,spd2,spd3,spd4,spd5,spd6,spd7;
Rbinas 1:ae1120188730 21 char speed[8];
Rbinas 1:ae1120188730 22 float speedInt;
Rbinas 1:ae1120188730 23
Rbinas 1:ae1120188730 24 char hdg1,hdg2,hdg3,hdg4,hdg5;
Rbinas 1:ae1120188730 25 char HDG[5];
Rbinas 1:ae1120188730 26 char Heading[6];
Rbinas 1:ae1120188730 27 float HeadingInt;
Rbinas 1:ae1120188730 28
Rbinas 1:ae1120188730 29 char GpsFix[2];
Rbinas 1:ae1120188730 30 char GF;
Rbinas 1:ae1120188730 31 int GFInt;
Rbinas 1:ae1120188730 32 char NOS[3];
Rbinas 1:ae1120188730 33 char Nos1,Nos2;
Rbinas 1:ae1120188730 34 int NOSInt;
Rbinas 1:ae1120188730 35 char HDOP[6];
Rbinas 1:ae1120188730 36 char Hdp1,Hdp2,Hdp3,Hdp4,Hdp5;
Rbinas 1:ae1120188730 37 float HDOPInt;
Rbinas 1:ae1120188730 38
Rbinas 1:ae1120188730 39 char LatDeg[3];
Rbinas 1:ae1120188730 40 char LatMin[8];
Rbinas 1:ae1120188730 41 int LatDegInt;
Rbinas 1:ae1120188730 42 float LatMinInt;
Rbinas 1:ae1120188730 43
Rbinas 1:ae1120188730 44 char LongDeg[4];
Rbinas 1:ae1120188730 45 char LongMin[8];
Rbinas 1:ae1120188730 46 int LongDegInt;
Rbinas 1:ae1120188730 47 float LongMinInt;
Rbinas 1:ae1120188730 48 void wait_ms(int us);
Rbinas 1:ae1120188730 49
Rbinas 1:ae1120188730 50 void EnableGPS()
Rbinas 1:ae1120188730 51 {
Rbinas 1:ae1120188730 52 pc.baud(9600);
Rbinas 1:ae1120188730 53 GPSBuffer[0] = '\0';
Rbinas 1:ae1120188730 54 while (1) {
Rbinas 1:ae1120188730 55 char c = gps.getc();
Rbinas 1:ae1120188730 56 s[0] = c;
Rbinas 1:ae1120188730 57 s[1] = '\0';
Rbinas 1:ae1120188730 58 strcat(GPSBuffer, s);
Rbinas 1:ae1120188730 59 if (c == '\n') {
Rbinas 1:ae1120188730 60 break;
Rbinas 1:ae1120188730 61 }
Rbinas 1:ae1120188730 62 if ((GPSBuffer[1] == 'G') && (GPSBuffer[2] == 'N') && (GPSBuffer[3] == 'R') && (GPSBuffer[4] == 'M') && (GPSBuffer[5] == 'C')&& (GPSBuffer[17] == 'A'))
Rbinas 1:ae1120188730 63 { // $GNRMC,174216.00,A,3908.86289,N,07647.84392,W,2.419,237.21,210219,,,A*6E
Rbinas 1:ae1120188730 64
Rbinas 1:ae1120188730 65 //Latitude---------------------------------------------------------------------------------------------------------------
Rbinas 1:ae1120188730 66 y1= GPSBuffer[19]; y2 = GPSBuffer[20]; //Degrees
Rbinas 1:ae1120188730 67 y3= GPSBuffer[21]; y4 = GPSBuffer[22];y5= GPSBuffer[24]; y6 = GPSBuffer[25];y7= GPSBuffer[26]; y8 = GPSBuffer[27];y9= GPSBuffer[28]; //DEGMIN
Rbinas 1:ae1120188730 68 NS = GPSBuffer[30];
Rbinas 1:ae1120188730 69
Rbinas 1:ae1120188730 70 sprintf(LatDeg,"%c%c",y1,y2);
Rbinas 1:ae1120188730 71 sprintf(LatMin,"%c%c%c%c%c%c%c",y3,y4,y5,y6,y7,y8,y9);
Rbinas 1:ae1120188730 72
Rbinas 1:ae1120188730 73 LatDegInt = atoi(LatDeg);
Rbinas 1:ae1120188730 74 LatMinInt = atoi(LatMin);
Rbinas 1:ae1120188730 75 LatMinInt = LatMinInt/100000;
Rbinas 1:ae1120188730 76 //----------------------------------------------------------------
Rbinas 1:ae1120188730 77 //Longitude
Rbinas 1:ae1120188730 78 x1= GPSBuffer[32]; x2= GPSBuffer[33]; x3= GPSBuffer[34];//Degrees
Rbinas 1:ae1120188730 79 x4=GPSBuffer[35]; x5=GPSBuffer[36]; x6=GPSBuffer[38]; x7=GPSBuffer[39]; x8=GPSBuffer[40]; x9=GPSBuffer[41];x10=GPSBuffer[42];//DEGMIN
Rbinas 1:ae1120188730 80 WE=GPSBuffer[44];
Rbinas 1:ae1120188730 81
Rbinas 1:ae1120188730 82 sprintf(LongDeg,"%c%c%c",x1,x2,x3);
Rbinas 1:ae1120188730 83 sprintf(LongMin,"%c%c%c%c%c%c%c",x4,x5,x6,x7,x8,x9,x10);
Rbinas 1:ae1120188730 84
Rbinas 1:ae1120188730 85 LongDegInt = atoi(LongDeg);
Rbinas 1:ae1120188730 86 LongMinInt = atoi(LongMin);
Rbinas 1:ae1120188730 87 LongMinInt = LongMinInt/100000;
Rbinas 1:ae1120188730 88
Rbinas 1:ae1120188730 89 //--------------------------------------------get speed------------------------------------------------------------------
Rbinas 1:ae1120188730 90 if((GPSBuffer[47] == '.')&& (GPSBuffer[51] == ','))//2.419
Rbinas 1:ae1120188730 91 {
Rbinas 1:ae1120188730 92 spd1=GPSBuffer[46]; spd2=GPSBuffer[47]; spd3=GPSBuffer[48]; spd4=GPSBuffer[49]; spd5=GPSBuffer[50];
Rbinas 1:ae1120188730 93 sprintf(speed,"00%c%c%c%c%c",spd1,spd2,spd3,spd4,spd5);
Rbinas 1:ae1120188730 94 }
Rbinas 1:ae1120188730 95 if((GPSBuffer[48] == '.')&& (GPSBuffer[52] == ','))//24.191
Rbinas 1:ae1120188730 96 {
Rbinas 1:ae1120188730 97 spd1=GPSBuffer[46]; spd2=GPSBuffer[47]; spd3=GPSBuffer[48]; spd4=GPSBuffer[49]; spd5=GPSBuffer[50]; spd6=GPSBuffer[51];
Rbinas 1:ae1120188730 98 sprintf(speed,"0%c%c%c%c%c%c",spd1,spd2,spd3,spd4,spd5,spd6);
Rbinas 1:ae1120188730 99 }
Rbinas 1:ae1120188730 100 if((GPSBuffer[49] == '.')&& (GPSBuffer[53] == ','))//240.191
Rbinas 1:ae1120188730 101 {
Rbinas 1:ae1120188730 102 spd1=GPSBuffer[46]; spd2=GPSBuffer[47]; spd3=GPSBuffer[48]; spd4=GPSBuffer[49]; spd5=GPSBuffer[50]; spd6=GPSBuffer[51]; spd7=GPSBuffer[52];
Rbinas 1:ae1120188730 103 sprintf(speed,"%c%c%c%c%c%c%c",spd1,spd2,spd3,spd4,spd5,spd6,spd7);
Rbinas 1:ae1120188730 104 }
Rbinas 1:ae1120188730 105 speedInt = atof(speed); //speed in knots
Rbinas 1:ae1120188730 106
Rbinas 1:ae1120188730 107 //----------------------------------------get Heading-------------------------------------------------------------------
Rbinas 1:ae1120188730 108 }
Rbinas 1:ae1120188730 109 if ((GPSBuffer[1] == 'G') && (GPSBuffer[2] == 'N') && (GPSBuffer[3] == 'V')&& (GPSBuffer[4] == 'T')&& (GPSBuffer[5] == 'G'))//MC Sentence
Rbinas 1:ae1120188730 110 {
Rbinas 1:ae1120188730 111
Rbinas 1:ae1120188730 112 if((GPSBuffer[8] == '.')&& (GPSBuffer[10] == ','))//2.4
Rbinas 1:ae1120188730 113 {
Rbinas 1:ae1120188730 114 hdg1=GPSBuffer[7]; hdg2=GPSBuffer[8]; hdg3=GPSBuffer[9];
Rbinas 1:ae1120188730 115 sprintf(Heading,"00%c%c%c",hdg1,hdg2,hdg3);
Rbinas 1:ae1120188730 116 }
Rbinas 1:ae1120188730 117 if((GPSBuffer[9] == '.')&& (GPSBuffer[11] == ','))//20.4
Rbinas 1:ae1120188730 118 {
Rbinas 1:ae1120188730 119 hdg1=GPSBuffer[7]; hdg2=GPSBuffer[8]; hdg3=GPSBuffer[9]; hdg4=GPSBuffer[10];
Rbinas 1:ae1120188730 120 sprintf(Heading,"0%c%c%c%c",hdg1,hdg2,hdg3,hdg4);
Rbinas 1:ae1120188730 121 }
Rbinas 1:ae1120188730 122 if((GPSBuffer[10] == '.')&&(GPSBuffer[12] == ','))//200.4
Rbinas 1:ae1120188730 123 {
Rbinas 1:ae1120188730 124 hdg1=GPSBuffer[7]; hdg2=GPSBuffer[8]; hdg3=GPSBuffer[9]; hdg4=GPSBuffer[10]; hdg5=GPSBuffer[11];
Rbinas 1:ae1120188730 125 sprintf(Heading,"%c%c%c%c%c",hdg1,hdg2,hdg3,hdg4,hdg5);
Rbinas 1:ae1120188730 126 }
Rbinas 1:ae1120188730 127 HeadingInt=atof(Heading);
Rbinas 1:ae1120188730 128 }
Rbinas 1:ae1120188730 129 if ((GPSBuffer[1] == 'G') && (GPSBuffer[2] == 'N') && (GPSBuffer[3] == 'G')&& (GPSBuffer[4] == 'G')&& (GPSBuffer[5] == 'A'))//MC Sentence
Rbinas 1:ae1120188730 130 { //$GNGGA,193247.00,3908.85437,N,07647.82746,W,1,11,0.86,50.0,M,-34.7,M,,*4E start at 44
Rbinas 1:ae1120188730 131
Rbinas 1:ae1120188730 132 GF=GPSBuffer[44];
Rbinas 1:ae1120188730 133 sprintf(GpsFix,"%c",GF);
Rbinas 1:ae1120188730 134 GFInt = atoi(GpsFix);//gpsfix
Rbinas 1:ae1120188730 135
Rbinas 1:ae1120188730 136 Nos1=GPSBuffer[46];
Rbinas 1:ae1120188730 137 Nos2=GPSBuffer[47];
Rbinas 1:ae1120188730 138 sprintf(NOS,"%c%c",Nos1,Nos2);//number of sats
Rbinas 1:ae1120188730 139 NOSInt = atoi(NOS);
Rbinas 1:ae1120188730 140
Rbinas 1:ae1120188730 141 if((GPSBuffer[50] == '.')&& (GPSBuffer[53] == ','))//0.66
Rbinas 1:ae1120188730 142 {
Rbinas 1:ae1120188730 143 Hdp1=GPSBuffer[49]; Hdp2=GPSBuffer[50]; Hdp3=GPSBuffer[51]; Hdp4=GPSBuffer[52];
Rbinas 1:ae1120188730 144 sprintf(HDOP,"0%c%c%c%c", Hdp1,Hdp2,Hdp3,Hdp4);
Rbinas 1:ae1120188730 145 }
Rbinas 1:ae1120188730 146 if((GPSBuffer[51] == '.')&& (GPSBuffer[54] == ','))//00.66
Rbinas 1:ae1120188730 147 {
Rbinas 1:ae1120188730 148 Hdp1=GPSBuffer[49]; Hdp2=GPSBuffer[50]; Hdp3=GPSBuffer[51]; Hdp4=GPSBuffer[52];Hdp5=GPSBuffer[53];
Rbinas 1:ae1120188730 149 sprintf(HDOP,"%c%c%c%c%c",Hdp1,Hdp2,Hdp3,Hdp4,Hdp5);
Rbinas 1:ae1120188730 150 }
Rbinas 1:ae1120188730 151 HDOPInt = atof(HDOP);//hdop
Rbinas 1:ae1120188730 152 }
Rbinas 1:ae1120188730 153 }
Rbinas 1:ae1120188730 154 }
Rbinas 1:ae1120188730 155
Rbinas 1:ae1120188730 156 #ifdef __cplusplus
Rbinas 1:ae1120188730 157 }
Rbinas 1:ae1120188730 158 #endif
Rbinas 1:ae1120188730 159
Rbinas 1:ae1120188730 160 #endif // #ifndef GPSUAV_H_