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