Library for the EM-406 GPS module

Fork of GPS by Simon Ford

Committer:
szabolev
Date:
Sat Mar 30 08:11:26 2013 +0000
Revision:
1:455c3e604c92
Parent:
0:15611c7938a3
Child:
2:4ebd0e486b5a
?desapa els? m?k?d? GPS programja

Who changed what in which revision?

UserRevisionLine numberNew contents of line
simon 0:15611c7938a3 1 #include "GPS.h"
simon 0:15611c7938a3 2
szabolev 1:455c3e604c92 3 GPS::GPS(PinName tx,PinName rx):_gps(tx,rx)
szabolev 1:455c3e604c92 4 {
szabolev 1:455c3e604c92 5 _gps.baud(4800);
szabolev 1:455c3e604c92 6 longitude=0.0;
szabolev 1:455c3e604c92 7 latitude=0.0;
szabolev 1:455c3e604c92 8 }
szabolev 1:455c3e604c92 9
szabolev 1:455c3e604c92 10 int GPS::sample()
szabolev 1:455c3e604c92 11 {
szabolev 1:455c3e604c92 12 float dummy,d1,d2;
szabolev 1:455c3e604c92 13 int lock;
szabolev 1:455c3e604c92 14 while(1)
szabolev 1:455c3e604c92 15 {
szabolev 1:455c3e604c92 16 getline();
szabolev 1:455c3e604c92 17 fok_jel='°';
szabolev 1:455c3e604c92 18 if(sscanf(msg,"GPGGA,%f,%f,%c,%f,%c,%d,%f,%f,%f",&time,&latitude,&ns,&longitude,&ew,&lock,&d1,&d2,&altitude)>=1)
szabolev 1:455c3e604c92 19 {
szabolev 1:455c3e604c92 20 ora=elso2(time)+1;
szabolev 1:455c3e604c92 21 perc=kozepso2(time);
szabolev 1:455c3e604c92 22 masodperc=utolso2(time);
szabolev 1:455c3e604c92 23 if(lock==0)
szabolev 1:455c3e604c92 24 {
szabolev 1:455c3e604c92 25 nincs_adat();
szabolev 1:455c3e604c92 26 altitude=0.0;
szabolev 1:455c3e604c92 27 }
szabolev 1:455c3e604c92 28 fokpercmasodperc();
szabolev 1:455c3e604c92 29 return 1;
szabolev 1:455c3e604c92 30 }
szabolev 1:455c3e604c92 31 if(sscanf(msg,"GPRMC,%f,%c,%f,%c,%f,%c,%f,%f,%f",&time,&status,&latitude,&ns,&longitude,&ew,&speed,&dummy,&date)>=1)
szabolev 1:455c3e604c92 32 {
szabolev 1:455c3e604c92 33 nap=elso2(date);
szabolev 1:455c3e604c92 34 ho=kozepso2(date);
szabolev 1:455c3e604c92 35 ev=utolso2(date);
szabolev 1:455c3e604c92 36 ora=elso2(time)+1;
szabolev 1:455c3e604c92 37 perc=kozepso2(time);
szabolev 1:455c3e604c92 38 masodperc=utolso2(time);
szabolev 1:455c3e604c92 39 if(status=='V')
szabolev 1:455c3e604c92 40 {
szabolev 1:455c3e604c92 41 nincs_adat();
szabolev 1:455c3e604c92 42 speed=0.0;
szabolev 1:455c3e604c92 43 }
szabolev 1:455c3e604c92 44 fokpercmasodperc();
szabolev 1:455c3e604c92 45 return 1;
szabolev 1:455c3e604c92 46 }
szabolev 1:455c3e604c92 47 }
simon 0:15611c7938a3 48 }
simon 0:15611c7938a3 49
szabolev 1:455c3e604c92 50 void GPS::fokpercmasodperc()
szabolev 1:455c3e604c92 51 {
szabolev 1:455c3e604c92 52 long_fok=fok_szamol(longitude);
szabolev 1:455c3e604c92 53 long_perc=perc_szamol(longitude);
szabolev 1:455c3e604c92 54 long_masodperc=masodperc_szamol(longitude);
szabolev 1:455c3e604c92 55 lati_fok=fok_szamol(latitude);
szabolev 1:455c3e604c92 56 lati_perc=perc_szamol(latitude);
szabolev 1:455c3e604c92 57 lati_masodperc=masodperc_szamol(latitude);
szabolev 1:455c3e604c92 58 }
simon 0:15611c7938a3 59
szabolev 1:455c3e604c92 60 void GPS::nincs_adat()
szabolev 1:455c3e604c92 61 {
szabolev 1:455c3e604c92 62 longitude=0.0;
szabolev 1:455c3e604c92 63 ew='?';
szabolev 1:455c3e604c92 64 latitude=0.0;
szabolev 1:455c3e604c92 65 ns='?';
szabolev 1:455c3e604c92 66 }
szabolev 1:455c3e604c92 67
szabolev 1:455c3e604c92 68 int GPS::fok_szamol(float f)
szabolev 1:455c3e604c92 69 {
szabolev 1:455c3e604c92 70 return (int)(f/100);
szabolev 1:455c3e604c92 71 }
szabolev 1:455c3e604c92 72
szabolev 1:455c3e604c92 73 int GPS::perc_szamol(float f)
szabolev 1:455c3e604c92 74 {
szabolev 1:455c3e604c92 75 return (int)(f-fok_szamol(f)*100);
simon 0:15611c7938a3 76 }
simon 0:15611c7938a3 77
szabolev 1:455c3e604c92 78 float GPS::masodperc_szamol(float f)
szabolev 1:455c3e604c92 79 {
szabolev 1:455c3e604c92 80 return (f-fok_szamol(f)*100-perc_szamol(f))*60;
szabolev 1:455c3e604c92 81 }
szabolev 1:455c3e604c92 82
szabolev 1:455c3e604c92 83 int GPS::elso2(float d)
szabolev 1:455c3e604c92 84 {
szabolev 1:455c3e604c92 85 return (int)floor(d/10000);
szabolev 1:455c3e604c92 86 }
szabolev 1:455c3e604c92 87
szabolev 1:455c3e604c92 88 int GPS::kozepso2(float d)
szabolev 1:455c3e604c92 89 {
szabolev 1:455c3e604c92 90 return (int)floor((d-elso2(d)*10000)/100);
simon 0:15611c7938a3 91 }
simon 0:15611c7938a3 92
szabolev 1:455c3e604c92 93 int GPS::utolso2(float d)
szabolev 1:455c3e604c92 94 {
szabolev 1:455c3e604c92 95 return (int)floor(d-elso2(d)*10000-kozepso2(d)*100);
simon 0:15611c7938a3 96 }
szabolev 1:455c3e604c92 97
szabolev 1:455c3e604c92 98 void GPS::getline()
szabolev 1:455c3e604c92 99 {
szabolev 1:455c3e604c92 100 while(_gps.getc() != '$'); // wait for the start of a line
szabolev 1:455c3e604c92 101 for(int i=0;i<256;i++)
szabolev 1:455c3e604c92 102 {
szabolev 1:455c3e604c92 103 msg[i]=_gps.getc();
szabolev 1:455c3e604c92 104 if(msg[i]=='\r')
szabolev 1:455c3e604c92 105 {
szabolev 1:455c3e604c92 106 msg[i]=0;
szabolev 1:455c3e604c92 107 return;
szabolev 1:455c3e604c92 108 }
szabolev 1:455c3e604c92 109 }
szabolev 1:455c3e604c92 110 error("Tul hosszu szoveg !");
szabolev 1:455c3e604c92 111 }