Dependents:   Lab3_Surveillance 6adcSerial

Committer:
keerthanasp
Date:
Fri Feb 04 13:13:32 2011 +0000
Revision:
4:c5d054086f2c
Parent:
3:ad00bddd493f

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
keerthanasp 0:14fd31ae13bb 1 #include "GPS.h"
keerthanasp 2:ba6c20754443 2 GPS::GPS(PinName tx, PinName rx) : _gps(tx, rx) {
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 4:c5d054086f2c 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 4:c5d054086f2c 20 if(ns =='S') { latitude *= -1.0; }
keerthanasp 4:c5d054086f2c 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