Library for the EM-406 GPS module
Fork of GPS by
GPS.cpp
- Committer:
- szabolev
- Date:
- 2013-03-30
- Revision:
- 1:455c3e604c92
- Parent:
- 0:15611c7938a3
- Child:
- 2:4ebd0e486b5a
File content as of revision 1:455c3e604c92:
#include "GPS.h" GPS::GPS(PinName tx,PinName rx):_gps(tx,rx) { _gps.baud(4800); longitude=0.0; latitude=0.0; } int GPS::sample() { float dummy,d1,d2; int lock; while(1) { getline(); fok_jel='°'; if(sscanf(msg,"GPGGA,%f,%f,%c,%f,%c,%d,%f,%f,%f",&time,&latitude,&ns,&longitude,&ew,&lock,&d1,&d2,&altitude)>=1) { ora=elso2(time)+1; perc=kozepso2(time); masodperc=utolso2(time); if(lock==0) { nincs_adat(); altitude=0.0; } fokpercmasodperc(); return 1; } if(sscanf(msg,"GPRMC,%f,%c,%f,%c,%f,%c,%f,%f,%f",&time,&status,&latitude,&ns,&longitude,&ew,&speed,&dummy,&date)>=1) { nap=elso2(date); ho=kozepso2(date); ev=utolso2(date); ora=elso2(time)+1; perc=kozepso2(time); masodperc=utolso2(time); if(status=='V') { nincs_adat(); speed=0.0; } fokpercmasodperc(); return 1; } } } void GPS::fokpercmasodperc() { long_fok=fok_szamol(longitude); long_perc=perc_szamol(longitude); long_masodperc=masodperc_szamol(longitude); lati_fok=fok_szamol(latitude); lati_perc=perc_szamol(latitude); lati_masodperc=masodperc_szamol(latitude); } void GPS::nincs_adat() { longitude=0.0; ew='?'; latitude=0.0; ns='?'; } int GPS::fok_szamol(float f) { return (int)(f/100); } int GPS::perc_szamol(float f) { return (int)(f-fok_szamol(f)*100); } float GPS::masodperc_szamol(float f) { return (f-fok_szamol(f)*100-perc_szamol(f))*60; } int GPS::elso2(float d) { return (int)floor(d/10000); } int GPS::kozepso2(float d) { return (int)floor((d-elso2(d)*10000)/100); } int GPS::utolso2(float d) { return (int)floor(d-elso2(d)*10000-kozepso2(d)*100); } void GPS::getline() { while(_gps.getc() != '$'); // wait for the start of a line for(int i=0;i<256;i++) { msg[i]=_gps.getc(); if(msg[i]=='\r') { msg[i]=0; return; } } error("Tul hosszu szoveg !"); }