GPSのライブラリ

Dependents:   Hybrid_IZU2021_MAIN_OS5 Hybrid_IZU2021_MAIN

Committer:
tanahashi
Date:
Tue Dec 15 15:36:25 2020 +0000
Revision:
0:04af1fbf2f11
first commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tanahashi 0:04af1fbf2f11 1 #include "mbed.h"
tanahashi 0:04af1fbf2f11 2 #include "PQ_GPS.h"
tanahashi 0:04af1fbf2f11 3
tanahashi 0:04af1fbf2f11 4 GPS::GPS(Serial &gps_serial)
tanahashi 0:04af1fbf2f11 5 {
tanahashi 0:04af1fbf2f11 6 _serial = &gps_serial;
tanahashi 0:04af1fbf2f11 7 _serial->attach(callback(this, &GPS::receive), Serial::RxIrq);
tanahashi 0:04af1fbf2f11 8 }
tanahashi 0:04af1fbf2f11 9
tanahashi 0:04af1fbf2f11 10 void GPS::receive()
tanahashi 0:04af1fbf2f11 11 {
tanahashi 0:04af1fbf2f11 12 char c = _serial->getc();
tanahashi 0:04af1fbf2f11 13 if(c == '$') {
tanahashi 0:04af1fbf2f11 14 index = 0;
tanahashi 0:04af1fbf2f11 15 flag = 1;
tanahashi 0:04af1fbf2f11 16 }
tanahashi 0:04af1fbf2f11 17 if(flag == 1) {
tanahashi 0:04af1fbf2f11 18 rx_buf[index] = c;
tanahashi 0:04af1fbf2f11 19 if(c == '\n') {
tanahashi 0:04af1fbf2f11 20 rx_buf[index + 1] = '\0';
tanahashi 0:04af1fbf2f11 21 flag = 2;
tanahashi 0:04af1fbf2f11 22 } else {
tanahashi 0:04af1fbf2f11 23 index++;
tanahashi 0:04af1fbf2f11 24 }
tanahashi 0:04af1fbf2f11 25 }
tanahashi 0:04af1fbf2f11 26 if(flag == 2) {
tanahashi 0:04af1fbf2f11 27 sscanf(rx_buf, "$GPGGA,%f,%f,%c,%f,%c,%d,%d,%f,%f,M,%f,M", &sec, &lat, &ns, &lon, &ew, &fix, &sat, &hdop, &alt, &geoid);
tanahashi 0:04af1fbf2f11 28
tanahashi 0:04af1fbf2f11 29 hour = (int)(sec / 10000);
tanahashi 0:04af1fbf2f11 30 min = (int)(sec - hour * 10000) / 100;
tanahashi 0:04af1fbf2f11 31 sec = sec - hour * 10000 - min * 100;
tanahashi 0:04af1fbf2f11 32
tanahashi 0:04af1fbf2f11 33 int d;
tanahashi 0:04af1fbf2f11 34 float m;
tanahashi 0:04af1fbf2f11 35
tanahashi 0:04af1fbf2f11 36 d = (int)lat / 100;
tanahashi 0:04af1fbf2f11 37 m = lat - (float)d * 100;
tanahashi 0:04af1fbf2f11 38 lat = (float)d + m / 60;
tanahashi 0:04af1fbf2f11 39 if(ns == 'S') {
tanahashi 0:04af1fbf2f11 40 lat = -lat;
tanahashi 0:04af1fbf2f11 41 }
tanahashi 0:04af1fbf2f11 42
tanahashi 0:04af1fbf2f11 43 d = (int)lon / 100;
tanahashi 0:04af1fbf2f11 44 m = lon - (float)d * 100;
tanahashi 0:04af1fbf2f11 45 lon = (float)d + m / 60;
tanahashi 0:04af1fbf2f11 46 if(ns == 'W') {
tanahashi 0:04af1fbf2f11 47 lon = -lon;
tanahashi 0:04af1fbf2f11 48 }
tanahashi 0:04af1fbf2f11 49
tanahashi 0:04af1fbf2f11 50 flag = 0;
tanahashi 0:04af1fbf2f11 51 }
tanahashi 0:04af1fbf2f11 52 }
tanahashi 0:04af1fbf2f11 53
tanahashi 0:04af1fbf2f11 54 int GPS::get_hour(){
tanahashi 0:04af1fbf2f11 55 return hour;
tanahashi 0:04af1fbf2f11 56 }
tanahashi 0:04af1fbf2f11 57
tanahashi 0:04af1fbf2f11 58 int GPS::get_min(){
tanahashi 0:04af1fbf2f11 59 return min;
tanahashi 0:04af1fbf2f11 60 }
tanahashi 0:04af1fbf2f11 61
tanahashi 0:04af1fbf2f11 62 float GPS::get_sec(){
tanahashi 0:04af1fbf2f11 63 return sec;
tanahashi 0:04af1fbf2f11 64 }
tanahashi 0:04af1fbf2f11 65
tanahashi 0:04af1fbf2f11 66 float GPS::get_lat(){
tanahashi 0:04af1fbf2f11 67 return lat;
tanahashi 0:04af1fbf2f11 68 }
tanahashi 0:04af1fbf2f11 69
tanahashi 0:04af1fbf2f11 70 float GPS::get_lon(){
tanahashi 0:04af1fbf2f11 71 return lon;
tanahashi 0:04af1fbf2f11 72 }
tanahashi 0:04af1fbf2f11 73
tanahashi 0:04af1fbf2f11 74 int GPS::get_fix(){
tanahashi 0:04af1fbf2f11 75 return fix;
tanahashi 0:04af1fbf2f11 76 }
tanahashi 0:04af1fbf2f11 77
tanahashi 0:04af1fbf2f11 78 int GPS::get_sat(){
tanahashi 0:04af1fbf2f11 79 return sat;
tanahashi 0:04af1fbf2f11 80 }
tanahashi 0:04af1fbf2f11 81
tanahashi 0:04af1fbf2f11 82 float GPS::get_hdop(){
tanahashi 0:04af1fbf2f11 83 return hdop;
tanahashi 0:04af1fbf2f11 84 }
tanahashi 0:04af1fbf2f11 85
tanahashi 0:04af1fbf2f11 86 float GPS::get_alt(){
tanahashi 0:04af1fbf2f11 87 return alt;
tanahashi 0:04af1fbf2f11 88 }
tanahashi 0:04af1fbf2f11 89
tanahashi 0:04af1fbf2f11 90 float GPS::get_geoid(){
tanahashi 0:04af1fbf2f11 91 return geoid;
tanahashi 0:04af1fbf2f11 92 }