Library for the EM-406 GPS module
Fork of GPS by
GPS.cpp@1:455c3e604c92, 2013-03-30 (annotated)
- 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?
User | Revision | Line number | New 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 | } |