Basis for uBlox-7 driver derived from GPS_CanSat
Dependents: Crunchtrack_GPS_GSM Battlehack_tracker_1_NO
Fork of GPS_CanSat by
GPS.cpp@1:a38751ecc25c, 2015-08-17 (annotated)
- Committer:
- gipmad
- Date:
- Mon Aug 17 18:17:26 2015 +0000
- Revision:
- 1:a38751ecc25c
- Parent:
- 0:94c22ada3c5a
Modified for basic 9600bps GPS
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
JST2011 | 0:94c22ada3c5a | 1 | #include "GPS.h" |
JST2011 | 0:94c22ada3c5a | 2 | |
JST2011 | 0:94c22ada3c5a | 3 | GPS::GPS(PinName tx, PinName rx) : _gps(tx, rx) { |
gipmad | 1:a38751ecc25c | 4 | //_gps.baud(38400); |
gipmad | 1:a38751ecc25c | 5 | _gps.baud(9600); |
gipmad | 1:a38751ecc25c | 6 | //_gps.baud(4800); |
gipmad | 1:a38751ecc25c | 7 | //_gps.printf("$PSRF103,2,0,0,1*26\r\n"); |
gipmad | 1:a38751ecc25c | 8 | //_gps.printf("$PSRF103,3,0,0,1*27\r\n"); |
gipmad | 1:a38751ecc25c | 9 | //_gps.printf("$PSRF103,4,0,0,1*20\r\n"); |
JST2011 | 0:94c22ada3c5a | 10 | flag_gps_get = 0; |
JST2011 | 0:94c22ada3c5a | 11 | flag_gps_getend = 0; |
JST2011 | 0:94c22ada3c5a | 12 | _gps.attach(this,&GPS::sample,Serial::RxIrq); |
JST2011 | 0:94c22ada3c5a | 13 | count = 0; |
JST2011 | 0:94c22ada3c5a | 14 | flag_gga = 0; |
JST2011 | 0:94c22ada3c5a | 15 | } |
JST2011 | 0:94c22ada3c5a | 16 | |
JST2011 | 0:94c22ada3c5a | 17 | void GPS::sample() { |
JST2011 | 0:94c22ada3c5a | 18 | getline(); |
JST2011 | 0:94c22ada3c5a | 19 | if(flag_gps_getend){ |
JST2011 | 0:94c22ada3c5a | 20 | if(sscanf(msg, "$GPGGA,%f,%f,%c,%f,%c,%d", &_time, &_latitude, &_ns, &_longitude, &_ew, &_lock) >= 1) { |
JST2011 | 0:94c22ada3c5a | 21 | flag_gga = 1; |
JST2011 | 0:94c22ada3c5a | 22 | strcpy(gga,msg); |
JST2011 | 0:94c22ada3c5a | 23 | float degrees = floor(_latitude / 100.0f); |
JST2011 | 0:94c22ada3c5a | 24 | float minutes = _latitude - (degrees * 100.0f); |
JST2011 | 0:94c22ada3c5a | 25 | _latitude = degrees + minutes / 60.0f; |
JST2011 | 0:94c22ada3c5a | 26 | degrees = floor(_longitude / 100.0f); |
JST2011 | 0:94c22ada3c5a | 27 | minutes = _longitude - (degrees * 100.0f); |
JST2011 | 0:94c22ada3c5a | 28 | _longitude = degrees + minutes /60.0f; |
JST2011 | 0:94c22ada3c5a | 29 | } |
JST2011 | 0:94c22ada3c5a | 30 | flag_gps_getend = 0; |
JST2011 | 0:94c22ada3c5a | 31 | } |
JST2011 | 0:94c22ada3c5a | 32 | } |
JST2011 | 0:94c22ada3c5a | 33 | |
JST2011 | 0:94c22ada3c5a | 34 | char* GPS::getGGA(){ |
JST2011 | 0:94c22ada3c5a | 35 | if(flag_gga){ |
JST2011 | 0:94c22ada3c5a | 36 | // strcpy(gga,msg); |
JST2011 | 0:94c22ada3c5a | 37 | flag_gga = 0; |
JST2011 | 0:94c22ada3c5a | 38 | } |
JST2011 | 0:94c22ada3c5a | 39 | return gga; |
JST2011 | 0:94c22ada3c5a | 40 | } |
JST2011 | 0:94c22ada3c5a | 41 | |
JST2011 | 0:94c22ada3c5a | 42 | float GPS::longitude(){ |
JST2011 | 0:94c22ada3c5a | 43 | return _longitude; |
JST2011 | 0:94c22ada3c5a | 44 | } |
JST2011 | 0:94c22ada3c5a | 45 | |
JST2011 | 0:94c22ada3c5a | 46 | float GPS::latitude(){ |
JST2011 | 0:94c22ada3c5a | 47 | return _latitude; |
JST2011 | 0:94c22ada3c5a | 48 | } |
JST2011 | 0:94c22ada3c5a | 49 | |
JST2011 | 0:94c22ada3c5a | 50 | float GPS::time(){ |
JST2011 | 0:94c22ada3c5a | 51 | return _time; |
JST2011 | 0:94c22ada3c5a | 52 | } |
JST2011 | 0:94c22ada3c5a | 53 | |
JST2011 | 0:94c22ada3c5a | 54 | int GPS::ns(){ |
JST2011 | 0:94c22ada3c5a | 55 | int d; |
JST2011 | 0:94c22ada3c5a | 56 | if(_ns == 'N'){ |
JST2011 | 0:94c22ada3c5a | 57 | d = 1; |
JST2011 | 0:94c22ada3c5a | 58 | }else{ |
JST2011 | 0:94c22ada3c5a | 59 | d = -1; |
JST2011 | 0:94c22ada3c5a | 60 | } |
JST2011 | 0:94c22ada3c5a | 61 | return d; |
JST2011 | 0:94c22ada3c5a | 62 | } |
JST2011 | 0:94c22ada3c5a | 63 | |
JST2011 | 0:94c22ada3c5a | 64 | int GPS::ew(){ |
JST2011 | 0:94c22ada3c5a | 65 | int d; |
JST2011 | 0:94c22ada3c5a | 66 | if(_ew == 'E'){ |
JST2011 | 0:94c22ada3c5a | 67 | d = 1; |
JST2011 | 0:94c22ada3c5a | 68 | }else{ |
JST2011 | 0:94c22ada3c5a | 69 | d = -1; |
JST2011 | 0:94c22ada3c5a | 70 | } |
JST2011 | 0:94c22ada3c5a | 71 | return d; |
JST2011 | 0:94c22ada3c5a | 72 | } |
JST2011 | 0:94c22ada3c5a | 73 | |
JST2011 | 0:94c22ada3c5a | 74 | int GPS::lock(){ |
JST2011 | 0:94c22ada3c5a | 75 | return _lock; |
JST2011 | 0:94c22ada3c5a | 76 | } |
JST2011 | 0:94c22ada3c5a | 77 | |
JST2011 | 0:94c22ada3c5a | 78 | void GPS::getline() { |
JST2011 | 0:94c22ada3c5a | 79 | char temp; |
JST2011 | 0:94c22ada3c5a | 80 | temp = _gps.getc(); |
JST2011 | 0:94c22ada3c5a | 81 | if(temp == '$'){ |
JST2011 | 0:94c22ada3c5a | 82 | flag_gps_get = 1; |
JST2011 | 0:94c22ada3c5a | 83 | count = 0; |
JST2011 | 0:94c22ada3c5a | 84 | } |
JST2011 | 0:94c22ada3c5a | 85 | if(flag_gps_get){ |
JST2011 | 0:94c22ada3c5a | 86 | msg[count] = temp; |
JST2011 | 0:94c22ada3c5a | 87 | if(temp == '\r'){ |
JST2011 | 0:94c22ada3c5a | 88 | msg[count] = '\0'; |
JST2011 | 0:94c22ada3c5a | 89 | flag_gps_getend = 1; |
JST2011 | 0:94c22ada3c5a | 90 | flag_gps_get = 0; |
JST2011 | 0:94c22ada3c5a | 91 | } |
JST2011 | 0:94c22ada3c5a | 92 | count ++; |
JST2011 | 0:94c22ada3c5a | 93 | } |
JST2011 | 0:94c22ada3c5a | 94 | } |