Dependents: Lab3_Surveillance 6adcSerial
GPS.cpp@1:b4de63a99f18, 2011-02-01 (annotated)
- Committer:
- keerthanasp
- Date:
- Tue Feb 01 15:46:29 2011 +0000
- Revision:
- 1:b4de63a99f18
- Parent:
- 0:14fd31ae13bb
- Child:
- 2:ba6c20754443
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
keerthanasp | 0:14fd31ae13bb | 1 | #include "GPS.h" |
keerthanasp | 1:b4de63a99f18 | 2 | GPS::GPS(PinName tx, PinName rx) : _gps(p13, p14) { |
keerthanasp | 1:b4de63a99f18 | 3 | _gps.baud(4800); |
keerthanasp | 0:14fd31ae13bb | 4 | longitude = 0.0; |
keerthanasp | 0:14fd31ae13bb | 5 | latitude = 0.0; |
keerthanasp | 0:14fd31ae13bb | 6 | } |
keerthanasp | 0:14fd31ae13bb | 7 | int GPS::sample() { |
keerthanasp | 0:14fd31ae13bb | 8 | float time; |
keerthanasp | 0:14fd31ae13bb | 9 | char ns,ew; |
keerthanasp | 0:14fd31ae13bb | 10 | int lock; |
keerthanasp | 0:14fd31ae13bb | 11 | |
keerthanasp | 0:14fd31ae13bb | 12 | while(1){ |
keerthanasp | 0:14fd31ae13bb | 13 | getline(); |
keerthanasp | 0:14fd31ae13bb | 14 | if(sscanf(msg, "GPGGA,%f,%f,%c,%f,%c,%d",&time, &latitude, &ns, &longitude, &ew, &lock) >=1) { |
keerthanasp | 0:14fd31ae13bb | 15 | if(!lock) { |
keerthanasp | 0:14fd31ae13bb | 16 | longitude = 0.0; |
keerthanasp | 0:14fd31ae13bb | 17 | latitude = 0.0; |
keerthanasp | 0:14fd31ae13bb | 18 | return 0; |
keerthanasp | 0:14fd31ae13bb | 19 | } else { |
keerthanasp | 0:14fd31ae13bb | 20 | if(ns =='s') { latitude *= -1.0; } |
keerthanasp | 0:14fd31ae13bb | 21 | if(ew =='w') { longitude *= -1.0; } |
keerthanasp | 0:14fd31ae13bb | 22 | float degrees = trunc(latitude / 100.0f); |
keerthanasp | 0:14fd31ae13bb | 23 | float minutes = latitude - (degrees * 100.0f); |
keerthanasp | 0:14fd31ae13bb | 24 | latitude = degrees + minutes / 60.0f; |
keerthanasp | 0:14fd31ae13bb | 25 | degrees = trunc(longitude / 100.0f * 0.01f); |
keerthanasp | 0:14fd31ae13bb | 26 | minutes = longitude - (degrees * 100.0f); |
keerthanasp | 1:b4de63a99f18 | 27 | longitude = degrees + minutes /60.0f; |
keerthanasp | 0:14fd31ae13bb | 28 | return 1; |
keerthanasp | 0:14fd31ae13bb | 29 | } |
keerthanasp | 0:14fd31ae13bb | 30 | } |
keerthanasp | 0:14fd31ae13bb | 31 | } |
keerthanasp | 0:14fd31ae13bb | 32 | } |
keerthanasp | 0:14fd31ae13bb | 33 | float GPS::trunc(float v) { |
keerthanasp | 1:b4de63a99f18 | 34 | if(v < 0.0) { |
keerthanasp | 0:14fd31ae13bb | 35 | v*= -1.0; |
keerthanasp | 0:14fd31ae13bb | 36 | v = floor(v); |
keerthanasp | 0:14fd31ae13bb | 37 | v*=-1.0; |
keerthanasp | 0:14fd31ae13bb | 38 | } else { |
keerthanasp | 0:14fd31ae13bb | 39 | v = floor(v); |
keerthanasp | 0:14fd31ae13bb | 40 | } |
keerthanasp | 1:b4de63a99f18 | 41 | return v; |
keerthanasp | 0:14fd31ae13bb | 42 | } |
keerthanasp | 0:14fd31ae13bb | 43 | void GPS::getline() { |
keerthanasp | 1:b4de63a99f18 | 44 | while(_gps.getc() != '$'); |
keerthanasp | 0:14fd31ae13bb | 45 | for(int i=0; i<256; i++) { |
keerthanasp | 0:14fd31ae13bb | 46 | msg[i] = _gps.getc(); |
keerthanasp | 0:14fd31ae13bb | 47 | if(msg[i] == '\r') { |
keerthanasp | 0:14fd31ae13bb | 48 | msg[i] = 0; |
keerthanasp | 0:14fd31ae13bb | 49 | return; |
keerthanasp | 0:14fd31ae13bb | 50 | } |
keerthanasp | 0:14fd31ae13bb | 51 | } |
keerthanasp | 0:14fd31ae13bb | 52 | error("overflowed message limit"); |
keerthanasp | 0:14fd31ae13bb | 53 | } |
keerthanasp | 0:14fd31ae13bb | 54 |