2018/06/18
GPS.cpp@3:940fe222bab0, 2018-06-13 (annotated)
- Committer:
- Tomo073
- Date:
- Wed Jun 13 06:54:42 2018 +0000
- Revision:
- 3:940fe222bab0
- Parent:
- 2:578f518a6a05
- Child:
- 4:41330399104d
?;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Tomo073 | 0:2c0d50143d85 | 1 | #include "mbed.h" |
Tomo073 | 0:2c0d50143d85 | 2 | #include "GPS.h" |
Tomo073 | 0:2c0d50143d85 | 3 | |
Tomo073 | 0:2c0d50143d85 | 4 | GPS::GPS(PinName gpstx,PinName gpsrx): serial(gpstx,gpsrx){ |
Tomo073 | 0:2c0d50143d85 | 5 | } |
Tomo073 | 0:2c0d50143d85 | 6 | |
Tomo073 | 0:2c0d50143d85 | 7 | void GPS::attach(void(*fn)()){ |
Tomo073 | 0:2c0d50143d85 | 8 | serial.attach(fn, Serial::RxIrq); |
Tomo073 | 0:2c0d50143d85 | 9 | } |
Tomo073 | 0:2c0d50143d85 | 10 | |
Tomo073 | 0:2c0d50143d85 | 11 | void GPS::GetDefault(){ |
Tomo073 | 0:2c0d50143d85 | 12 | datadefault = serial.getc(); |
Tomo073 | 0:2c0d50143d85 | 13 | } |
Tomo073 | 0:2c0d50143d85 | 14 | |
Tomo073 | 2:578f518a6a05 | 15 | void GPS::GetData(){ |
Tomo073 | 0:2c0d50143d85 | 16 | |
Tomo073 | 0:2c0d50143d85 | 17 | Initialization(); |
Tomo073 | 0:2c0d50143d85 | 18 | |
Tomo073 | 0:2c0d50143d85 | 19 | datadefault = serial.getc(); |
Tomo073 | 0:2c0d50143d85 | 20 | |
Tomo073 | 0:2c0d50143d85 | 21 | if(datadefault == '$'){ |
Tomo073 | 0:2c0d50143d85 | 22 | |
Tomo073 | 2:578f518a6a05 | 23 | char DATA[20] = "\0"; |
Tomo073 | 2:578f518a6a05 | 24 | |
Tomo073 | 0:2c0d50143d85 | 25 | Initialization(); |
Tomo073 | 0:2c0d50143d85 | 26 | getstring(DATA); |
Tomo073 | 0:2c0d50143d85 | 27 | |
Tomo073 | 0:2c0d50143d85 | 28 | if(!strcmp(DATA, "GPGGA")){ |
Tomo073 | 2:578f518a6a05 | 29 | |
Tomo073 | 2:578f518a6a05 | 30 | int info; |
Tomo073 | 2:578f518a6a05 | 31 | |
Tomo073 | 2:578f518a6a05 | 32 | for(info=1;info<11;info++){ |
Tomo073 | 2:578f518a6a05 | 33 | |
Tomo073 | 0:2c0d50143d85 | 34 | getstring(DATA); |
Tomo073 | 2:578f518a6a05 | 35 | |
Tomo073 | 1:2f131675f872 | 36 | switch(info){ |
Tomo073 | 0:2c0d50143d85 | 37 | case 1: |
Tomo073 | 0:2c0d50143d85 | 38 | time = strtof(DATA, NULL) + 90000.0; |
Tomo073 | 0:2c0d50143d85 | 39 | break; |
Tomo073 | 0:2c0d50143d85 | 40 | case 2: |
Tomo073 | 0:2c0d50143d85 | 41 | fMinutes = modff(strtof(DATA, NULL), &latitude)*60.0; |
Tomo073 | 0:2c0d50143d85 | 42 | latitude = latitude*100.0 + fMinutes; |
Tomo073 | 0:2c0d50143d85 | 43 | break; |
Tomo073 | 0:2c0d50143d85 | 44 | case 3: |
Tomo073 | 0:2c0d50143d85 | 45 | if(!strcmp(DATA, "S")){ |
Tomo073 | 0:2c0d50143d85 | 46 | latitude = latitude*-1.0; |
Tomo073 | 0:2c0d50143d85 | 47 | } |
Tomo073 | 0:2c0d50143d85 | 48 | break; |
Tomo073 | 2:578f518a6a05 | 49 | case 4: |
Tomo073 | 0:2c0d50143d85 | 50 | fMinutes = modff(strtof(DATA, NULL), &longtitude)*60.0; |
Tomo073 | 0:2c0d50143d85 | 51 | longtitude = longtitude*100.0 + fMinutes; |
Tomo073 | 0:2c0d50143d85 | 52 | break; |
Tomo073 | 0:2c0d50143d85 | 53 | case 5: |
Tomo073 | 0:2c0d50143d85 | 54 | if(!strcmp(DATA, "W")){ |
Tomo073 | 0:2c0d50143d85 | 55 | longtitude = longtitude*-1.0; |
Tomo073 | 0:2c0d50143d85 | 56 | } |
Tomo073 | 0:2c0d50143d85 | 57 | break; |
Tomo073 | 0:2c0d50143d85 | 58 | case 9: |
Tomo073 | 0:2c0d50143d85 | 59 | altitude = strtof(DATA, NULL); |
Tomo073 | 0:2c0d50143d85 | 60 | break; |
Tomo073 | 0:2c0d50143d85 | 61 | case 10: |
Tomo073 | 0:2c0d50143d85 | 62 | if(strcmp(DATA, "M")){ |
Tomo073 | 0:2c0d50143d85 | 63 | altitude = altitude*-1.0; |
Tomo073 | 0:2c0d50143d85 | 64 | } |
Tomo073 | 0:2c0d50143d85 | 65 | readable = true; |
Tomo073 | 0:2c0d50143d85 | 66 | break; |
Tomo073 | 0:2c0d50143d85 | 67 | } |
Tomo073 | 2:578f518a6a05 | 68 | |
Tomo073 | 0:2c0d50143d85 | 69 | } |
Tomo073 | 0:2c0d50143d85 | 70 | } |
Tomo073 | 0:2c0d50143d85 | 71 | } |
Tomo073 | 0:2c0d50143d85 | 72 | } |
Tomo073 | 0:2c0d50143d85 | 73 | |
Tomo073 | 0:2c0d50143d85 | 74 | void GPS::getstring(char a[]){ |
Tomo073 | 0:2c0d50143d85 | 75 | int n; |
Tomo073 | 0:2c0d50143d85 | 76 | for(n = 0;;n++){ |
Tomo073 | 0:2c0d50143d85 | 77 | char ch = serial.getc(); |
Tomo073 | 0:2c0d50143d85 | 78 | if(ch == ',' ||ch == '\n'){ |
Tomo073 | 0:2c0d50143d85 | 79 | a[n] = '\0'; |
Tomo073 | 0:2c0d50143d85 | 80 | break; |
Tomo073 | 0:2c0d50143d85 | 81 | } |
Tomo073 | 0:2c0d50143d85 | 82 | a[n] = ch; |
Tomo073 | 0:2c0d50143d85 | 83 | } |
Tomo073 | 0:2c0d50143d85 | 84 | } |
Tomo073 | 0:2c0d50143d85 | 85 | |
Tomo073 | 0:2c0d50143d85 | 86 | void GPS::Initialization(){ |
Tomo073 | 0:2c0d50143d85 | 87 | readable = false; |
Tomo073 | 0:2c0d50143d85 | 88 | longtitude = -1.0; |
Tomo073 | 0:2c0d50143d85 | 89 | latitude = -1.0; |
Tomo073 | 0:2c0d50143d85 | 90 | altitude = -1.0; |
Tomo073 | 0:2c0d50143d85 | 91 | time = -1.0; |
Tomo073 | 0:2c0d50143d85 | 92 | fMinutes = -1.0; |
Tomo073 | 1:2f131675f872 | 93 | } |
Tomo073 | 2:578f518a6a05 | 94 |