gps
Embed:
(wiki syntax)
Show/hide line numbers
getGPS.cpp
00001 #include "mbed.h" 00002 #include "getGPS.h" 00003 00004 GPS::GPS(PinName gpstx,PinName gpsrx): _gps(gpstx,gpsrx) 00005 { 00006 latitude = 0; 00007 longitude = 0; 00008 _gps.baud(GPSBAUD); 00009 _gps.printf("$PMTK314,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*29"); 00010 } 00011 00012 bool GPS::getgps() 00013 { 00014 char gps_data[256]; 00015 int i; 00016 00017 do { 00018 while(_gps.getc() != '$'); //$マークまで読み飛ばす 00019 00020 i = 0; 00021 00022 /*gpsデータを初期化*/ 00023 for(int j = 0; j < 256; j++){ 00024 gps_data[j] = '\0'; 00025 } 00026 00027 /* NMEAから一行読み込み */ 00028 while((gps_data[i] = _gps.getc()) != '\r')//受信データを格納、\rが出てくるまでループ 00029 { 00030 i++; 00031 if(i == 256) { 00032 i = 255; 00033 break; 00034 } 00035 } 00036 } while(strstr(gps_data, "GPGGA") == NULL); //GGAセンテンスまで一行ずつ読み込み続ける 00037 00038 int rlock; 00039 char ns,ew; 00040 double w_time, raw_longitude, raw_latitude; 00041 int satnum; 00042 double hdop; 00043 00044 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) { 00045 /*座標1(度成分)*/ 00046 double latitude_dd = (double)(raw_latitude / 100); 00047 double longitude_dd = (double)(raw_longitude / 100); 00048 00049 /* 座標2(分成分 → 度)*/ 00050 double latitude_md = (raw_latitude - latitude_dd * 100) / 60; 00051 double longitude_md = (raw_longitude - longitude_dd * 100) / 60; 00052 00053 /* 座標1+座標2 */ 00054 latitude = latitude_dd + latitude_md; 00055 longitude = longitude_dd + longitude_md; 00056 00057 return true; 00058 } else 00059 return false; //GGAセンテンスの情報が欠けている時 00060 } 00061
Generated on Mon Jul 18 2022 06:04:15 by
1.7.2