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