2018/06/18

Dependents:   library

Committer:
Tomo073
Date:
Fri Jun 29 04:28:29 2018 +0000
Revision:
5:b97034d6df35
Parent:
4:41330399104d
a

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