otamesi

Dependencies:   mbed

Committer:
seangshim
Date:
Sat Feb 16 05:40:24 2019 +0000
Revision:
41:7c537a922510
Parent:
21:5fa04278ec78
nei

Who changed what in which revision?

UserRevisionLine numberNew contents of line
seangshim 0:a01fda36fde8 1 #include "mbed.h"
seangshim 0:a01fda36fde8 2 #include "gps.h"
seangshim 0:a01fda36fde8 3
seangshim 0:a01fda36fde8 4 GPS::GPS(PinName gpstx,PinName gpsrx): _gps(gpstx,gpsrx)
seangshim 0:a01fda36fde8 5 {
seangshim 0:a01fda36fde8 6 latitude = 0;
seangshim 0:a01fda36fde8 7 longitude = 0;
seangshim 0:a01fda36fde8 8 _gps.baud(GPSBAUD);
seangshim 0:a01fda36fde8 9 _gps.printf("$PMTK314,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*29");
seangshim 0:a01fda36fde8 10 }
seangshim 0:a01fda36fde8 11
seangshim 0:a01fda36fde8 12 bool GPS::getgps()
seangshim 0:a01fda36fde8 13 {
seangshim 0:a01fda36fde8 14
seangshim 0:a01fda36fde8 15
seangshim 0:a01fda36fde8 16 char gps_data[256];
seangshim 0:a01fda36fde8 17 int i;
seangshim 0:a01fda36fde8 18
seangshim 0:a01fda36fde8 19 do {
seangshim 0:a01fda36fde8 20 while(_gps.getc() != '$'); //$マークまで読み飛ばし
seangshim 0:a01fda36fde8 21 i = 0;
seangshim 0:a01fda36fde8 22
seangshim 0:a01fda36fde8 23 /* gpa_data初期化 */
seangshim 0:a01fda36fde8 24 for(int j = 0; j < 256; j++)
seangshim 0:a01fda36fde8 25 gps_data[j] = '\0';
seangshim 0:a01fda36fde8 26
seangshim 0:a01fda36fde8 27 /* NMEAから一行読み込み */
seangshim 0:a01fda36fde8 28 while((gps_data[i] = _gps.getc()) != '\r') {
seangshim 0:a01fda36fde8 29 i++;
seangshim 0:a01fda36fde8 30 if(i == 256) {
seangshim 0:a01fda36fde8 31 i = 255;
seangshim 0:a01fda36fde8 32 break;
seangshim 0:a01fda36fde8 33 }
seangshim 0:a01fda36fde8 34 }
seangshim 0:a01fda36fde8 35
seangshim 0:a01fda36fde8 36
seangshim 0:a01fda36fde8 37 } while(strstr(gps_data, "GPGGA") == NULL); //GGAセンテンスまで一行ずつ読み込み続ける
seangshim 0:a01fda36fde8 38
seangshim 0:a01fda36fde8 39
seangshim 0:a01fda36fde8 40
seangshim 0:a01fda36fde8 41 int rlock;
seangshim 0:a01fda36fde8 42 char ns,ew;
seangshim 0:a01fda36fde8 43 double w_time, raw_longitude, raw_latitude;
seangshim 0:a01fda36fde8 44 int satnum;
seangshim 0:a01fda36fde8 45 double hdop;
seangshim 0:a01fda36fde8 46
seangshim 0:a01fda36fde8 47 if(sscanf(gps_data, "GPGGA, %lf, %lf, %c, %lf, %c, %d, %d, %lf", &w_time, &raw_latitude, &ns, &raw_longitude, &ew, &rlock, &satnum, &hdop) > 1) {
seangshim 0:a01fda36fde8 48 /* 座標1(度部分) */
seangshim 21:5fa04278ec78 49 float latitude_dd = (int)(raw_latitude / 100);
seangshim 21:5fa04278ec78 50 float longitude_dd = (int)(raw_longitude / 100);
seangshim 0:a01fda36fde8 51
seangshim 0:a01fda36fde8 52 /* 座標2(分部分 → 度) */
seangshim 21:5fa04278ec78 53 float latitude_md = (raw_latitude - latitude_dd * 100) / 60;
seangshim 21:5fa04278ec78 54 float longitude_md = (raw_longitude - longitude_dd * 100) / 60;
seangshim 0:a01fda36fde8 55
seangshim 0:a01fda36fde8 56 /* 座標1 + 2 */
seangshim 0:a01fda36fde8 57 latitude = latitude_dd + latitude_md;
seangshim 0:a01fda36fde8 58 longitude = longitude_dd + longitude_md;
seangshim 0:a01fda36fde8 59
seangshim 0:a01fda36fde8 60 return true;
seangshim 0:a01fda36fde8 61 } else
seangshim 0:a01fda36fde8 62 return false; //GGAセンテンスの情報が欠けている時
seangshim 0:a01fda36fde8 63 }