Ricardo Binas
/
GPSUAV
GPS UAV, Latitude,Longitude, Speed, Heading, GPS Fix, No.Of Sats. HDOP
GPSUAV.h@1:ae1120188730, 2019-02-24 (annotated)
- Committer:
- Rbinas
- Date:
- Sun Feb 24 02:01:36 2019 +0000
- Revision:
- 1:ae1120188730
Rev 0
Who changed what in which revision?
User | Revision | Line number | New 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_ |