Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: sample_GPS_GYSFDMAXB nucleo_sample_GPS_GYSFDMAXB sample_GPS_GYSFDMAXB_for_nucleo CanSat-C
getGPS.cpp
- Committer:
- CanSat_C
- Date:
- 2018-07-09
- Revision:
- 1:2046f20df896
- Parent:
- 0:030ffb18f36d
File content as of revision 1:2046f20df896:
#include "mbed.h"
#include "getGPS.h"
GPS::GPS(PinName gpstx,PinName gpsrx): _gps(gpstx,gpsrx)
{
latitude = 0;
longitude = 0;
_gps.baud(GPSBAUD);
_gps.printf("$PMTK314,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*29");
}
bool GPS::getgps()
{
char gps_data[256];
int i;
do {
while(_gps.getc() != '$'); //$マークまで読み飛ばし
i = 0;
/* gpa_data初期化 */
for(int j = 0; j < 256; j++)
gps_data[j] = '\0';
/* NMEAから一行読み込み */
while((gps_data[i] = _gps.getc()) != '\r') {
i++;
if(i == 256) {
i = 255;
break;
}
}
} while(strstr(gps_data, "GPGGA") == NULL); //GGAセンテンスまで一行ずつ読み込み続ける
int rlock;
char ns,ew;
double w_time, raw_longitude, raw_latitude;
int satnum;
double hdop;
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) {
/* 座標1(度部分) */
int latitude_dd = (int)(raw_latitude / 100);
int longitude_dd = (int)(raw_longitude / 100);
/* 座標2(分部分 → 度) */
double latitude_md = (raw_latitude - latitude_dd * 100) / 60;
double longitude_md = (raw_longitude - longitude_dd * 100) / 60;
/* 座標1 + 2 */
latitude = latitude_dd + latitude_md;
longitude = longitude_dd + longitude_md;
return true;
} else
return false; //GGAセンテンスの情報が欠けている時
}