ロロロロ

Dependencies:   mbed BMP180

Committer:
naruu
Date:
Thu Dec 17 17:29:28 2020 +0000
Revision:
2:98629c0bb9ff
no;

Who changed what in which revision?

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