2018/06/18

Dependents:   library

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?

UserRevisionLine numberNew 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