ゑひと氏のをクラス化致した

Committer:
IKobayashi
Date:
Mon Feb 24 09:58:22 2020 +0000
Revision:
0:f291337e7ce9
GO is GOD

Who changed what in which revision?

UserRevisionLine numberNew contents of line
IKobayashi 0:f291337e7ce9 1 #include "mbed.h"
IKobayashi 0:f291337e7ce9 2 #include "GPS.h"
IKobayashi 0:f291337e7ce9 3
IKobayashi 0:f291337e7ce9 4 GPS::GPS(PinName gpstx, PinName gpsrx) : _gps(gpstx, gpsrx)
IKobayashi 0:f291337e7ce9 5 {
IKobayashi 0:f291337e7ce9 6 g_hour = 0, g_min = 0, g_sec = 0;
IKobayashi 0:f291337e7ce9 7 g_hokui = 0, g_tokei = 0;
IKobayashi 0:f291337e7ce9 8 stlgt = 0;
IKobayashi 0:f291337e7ce9 9 date = 0;
IKobayashi 0:f291337e7ce9 10 velocity = 0, direction = 0;
IKobayashi 0:f291337e7ce9 11 w_time = 0, hokui = 0, tokei = 0;
IKobayashi 0:f291337e7ce9 12
IKobayashi 0:f291337e7ce9 13 _gps.baud(GPSBAUD);
IKobayashi 0:f291337e7ce9 14 _gps.attach(this, &GPS::getGPS);
IKobayashi 0:f291337e7ce9 15 }
IKobayashi 0:f291337e7ce9 16
IKobayashi 0:f291337e7ce9 17 void GPS::getGPS()
IKobayashi 0:f291337e7ce9 18 {
IKobayashi 0:f291337e7ce9 19 c = _gps.getc();
IKobayashi 0:f291337e7ce9 20 if (c == '$' || i == 256) {
IKobayashi 0:f291337e7ce9 21 mode = 0;
IKobayashi 0:f291337e7ce9 22 i = 0;
IKobayashi 0:f291337e7ce9 23 for (int j = 0; j < 256; j++) {
IKobayashi 0:f291337e7ce9 24 gps_data[j] = NULL;
IKobayashi 0:f291337e7ce9 25 }
IKobayashi 0:f291337e7ce9 26 }
IKobayashi 0:f291337e7ce9 27 if (mode == 0) {
IKobayashi 0:f291337e7ce9 28 if ((gps_data[i] = c) != '\r') {
IKobayashi 0:f291337e7ce9 29 i++;
IKobayashi 0:f291337e7ce9 30 } else {
IKobayashi 0:f291337e7ce9 31 gps_data[i] = '\0';
IKobayashi 0:f291337e7ce9 32
IKobayashi 0:f291337e7ce9 33 //pc.printf(gps_data);
IKobayashi 0:f291337e7ce9 34 //pc.printf("\r\n");
IKobayashi 0:f291337e7ce9 35
IKobayashi 0:f291337e7ce9 36 if (sscanf(gps_data, "$GPGGA,%f,%f,%c,%f,%c,%d,%d", &w_time, &hokui, &ns, &tokei, &ew, &rlock, &stlgt) >= 1) {
IKobayashi 0:f291337e7ce9 37 if (rlock == 1) {
IKobayashi 0:f291337e7ce9 38 //logitude
IKobayashi 0:f291337e7ce9 39 d_tokei = int(tokei / 100);
IKobayashi 0:f291337e7ce9 40 m_tokei = (tokei - d_tokei * 100) / 60;
IKobayashi 0:f291337e7ce9 41 g_tokei = d_tokei + m_tokei;
IKobayashi 0:f291337e7ce9 42 //Latitude
IKobayashi 0:f291337e7ce9 43 d_hokui = int(hokui / 100);
IKobayashi 0:f291337e7ce9 44 m_hokui = (hokui - d_hokui * 100) / 60;
IKobayashi 0:f291337e7ce9 45 g_hokui = d_hokui + m_hokui;
IKobayashi 0:f291337e7ce9 46
IKobayashi 0:f291337e7ce9 47 float timenow = w_time;
IKobayashi 0:f291337e7ce9 48 int hour = timenow / 10000;
IKobayashi 0:f291337e7ce9 49 timenow = fmod(timenow, 10000);
IKobayashi 0:f291337e7ce9 50 int min = timenow / 100;
IKobayashi 0:f291337e7ce9 51 timenow = fmod(timenow, 100);
IKobayashi 0:f291337e7ce9 52 int sec = timenow / 1;
IKobayashi 0:f291337e7ce9 53 timenow = fmod(timenow, 1);
IKobayashi 0:f291337e7ce9 54
IKobayashi 0:f291337e7ce9 55 g_hour = hour;
IKobayashi 0:f291337e7ce9 56 g_min = min;
IKobayashi 0:f291337e7ce9 57 g_sec = sec;
IKobayashi 0:f291337e7ce9 58
IKobayashi 0:f291337e7ce9 59 // /*
IKobayashi 0:f291337e7ce9 60 // 10進法(google)
IKobayashi 0:f291337e7ce9 61 //pc.printf("世界標準時:%02dh%02dm%02ds 北緯:%.8f 東経:%.8f 状態:%d 使用衛星数:%d\r\n",
IKobayashi 0:f291337e7ce9 62 // hour, min, sec, g_hokui, g_tokei, rlock, stlgt);
IKobayashi 0:f291337e7ce9 63 // */
IKobayashi 0:f291337e7ce9 64 /*
IKobayashi 0:f291337e7ce9 65 // 60進法(x時y分z秒w)
IKobayashi 0:f291337e7ce9 66 pc.printf("s世界標準時:%02dh%02dm%02ds 北緯:%.8f 東経:%.8f 状態:%d 使用衛星数:%d\r\n",
IKobayashi 0:f291337e7ce9 67 hour, min, sec, hokui/100, tokei/100, rlock, stlgt);
IKobayashi 0:f291337e7ce9 68 */
IKobayashi 0:f291337e7ce9 69 } else {
IKobayashi 0:f291337e7ce9 70 float timenow = w_time;
IKobayashi 0:f291337e7ce9 71 int hour = timenow / 10000;
IKobayashi 0:f291337e7ce9 72 timenow = fmod(timenow, 10000);
IKobayashi 0:f291337e7ce9 73 int min = timenow / 100;
IKobayashi 0:f291337e7ce9 74 timenow = fmod(timenow, 100);
IKobayashi 0:f291337e7ce9 75 int sec = timenow / 1;
IKobayashi 0:f291337e7ce9 76 timenow = fmod(timenow, 1);
IKobayashi 0:f291337e7ce9 77
IKobayashi 0:f291337e7ce9 78 g_hour = hour;
IKobayashi 0:f291337e7ce9 79 g_min = min;
IKobayashi 0:f291337e7ce9 80 g_sec = sec;
IKobayashi 0:f291337e7ce9 81
IKobayashi 0:f291337e7ce9 82 //pc.printf("# 世界標準時e:%02dh%02dm%02d 状態:%d 使用衛星数:%d\r\n",
IKobayashi 0:f291337e7ce9 83 // hour, min, sec, rlock, stlgt);
IKobayashi 0:f291337e7ce9 84 }
IKobayashi 0:f291337e7ce9 85 sprintf(gps_data, "");
IKobayashi 0:f291337e7ce9 86 } //if
IKobayashi 0:f291337e7ce9 87
IKobayashi 0:f291337e7ce9 88 /* ------------------------------ */
IKobayashi 0:f291337e7ce9 89 if (sscanf(gps_data, "$GPRMC,%f,%f,%f,%d", &w_time, &velocity, &direction, &date) >= 1) {
IKobayashi 0:f291337e7ce9 90 if (rlock == 1) {
IKobayashi 0:f291337e7ce9 91
IKobayashi 0:f291337e7ce9 92 float timenow = w_time;
IKobayashi 0:f291337e7ce9 93 int hour = timenow / 10000;
IKobayashi 0:f291337e7ce9 94 timenow = fmod(timenow, 10000);
IKobayashi 0:f291337e7ce9 95 int min = timenow / 100;
IKobayashi 0:f291337e7ce9 96 timenow = fmod(timenow, 100);
IKobayashi 0:f291337e7ce9 97 int sec = timenow / 1;
IKobayashi 0:f291337e7ce9 98 timenow = fmod(timenow, 1);
IKobayashi 0:f291337e7ce9 99
IKobayashi 0:f291337e7ce9 100 float v_mps = velocity * 1852 / 3600;
IKobayashi 0:f291337e7ce9 101
IKobayashi 0:f291337e7ce9 102 // /*
IKobayashi 0:f291337e7ce9 103 // 10進法(google)
IKobayashi 0:f291337e7ce9 104 //pc.printf("世界標準時:%02dh%02dm%02ds 速度:%f[mps] 方位:%f, 日付:20%02d年%02d月%02d日\r\n",
IKobayashi 0:f291337e7ce9 105 // hour, min, sec, v_mps, direction, date % 100, (date / 100) % 100, date / 10000);
IKobayashi 0:f291337e7ce9 106 // */
IKobayashi 0:f291337e7ce9 107 /*
IKobayashi 0:f291337e7ce9 108 // 60進法(x時y分z秒w)
IKobayashi 0:f291337e7ce9 109 pc.printf("世界標準時:%02dh%02dm%02ds 速度:%f[mps] 方位:%f, 日付:20%02d年%02d月%02d日\r\n",
IKobayashi 0:f291337e7ce9 110 hour,min,sec,velocity,direction,date%100,(date/100)%100, date/10000);
IKobayashi 0:f291337e7ce9 111 */
IKobayashi 0:f291337e7ce9 112 } else {
IKobayashi 0:f291337e7ce9 113 float timenow = w_time;
IKobayashi 0:f291337e7ce9 114 int hour = timenow / 10000;
IKobayashi 0:f291337e7ce9 115 timenow = fmod(timenow, 10000);
IKobayashi 0:f291337e7ce9 116 int min = timenow / 100;
IKobayashi 0:f291337e7ce9 117 timenow = fmod(timenow, 100);
IKobayashi 0:f291337e7ce9 118 int sec = timenow / 1;
IKobayashi 0:f291337e7ce9 119 timenow = fmod(timenow, 1);
IKobayashi 0:f291337e7ce9 120
IKobayashi 0:f291337e7ce9 121 //pc.printf("# 世界標準時:%02dh%02dm%02ds 速度:%f[knot] 方位:%f, 日付:20%02d年%02d月%02d日\r\n",
IKobayashi 0:f291337e7ce9 122 // hour, min, sec, velocity, direction, date % 100, (date / 100) % 100, date / 10000);
IKobayashi 0:f291337e7ce9 123 }
IKobayashi 0:f291337e7ce9 124 sprintf(gps_data, "");
IKobayashi 0:f291337e7ce9 125 } //if
IKobayashi 0:f291337e7ce9 126
IKobayashi 0:f291337e7ce9 127 //pc.printf("\r\n");
IKobayashi 0:f291337e7ce9 128 }
IKobayashi 0:f291337e7ce9 129 }
IKobayashi 0:f291337e7ce9 130 }
IKobayashi 0:f291337e7ce9 131
IKobayashi 0:f291337e7ce9 132 /* --- 生データ取得用 --- */
IKobayashi 0:f291337e7ce9 133 /*
IKobayashi 0:f291337e7ce9 134 #include "mbed.h"
IKobayashi 0:f291337e7ce9 135
IKobayashi 0:f291337e7ce9 136 Serial gps(p9, p10); // TX, RX
IKobayashi 0:f291337e7ce9 137 Serial pc(USBTX, USBRX); // TX, RX
IKobayashi 0:f291337e7ce9 138 DigitalOut led1(LED1);
IKobayashi 0:f291337e7ce9 139
IKobayashi 0:f291337e7ce9 140 int main() {
IKobayashi 0:f291337e7ce9 141 pc.baud(115200);
IKobayashi 0:f291337e7ce9 142 pc.printf("PA6C DEMO\n");
IKobayashi 0:f291337e7ce9 143 char gpsout[1024];
IKobayashi 0:f291337e7ce9 144 while (1) {
IKobayashi 0:f291337e7ce9 145 gpsout[0] = '\0';
IKobayashi 0:f291337e7ce9 146 while (1) {
IKobayashi 0:f291337e7ce9 147 char c = gps.getc();
IKobayashi 0:f291337e7ce9 148 char s[2];
IKobayashi 0:f291337e7ce9 149 s[0] = c;
IKobayashi 0:f291337e7ce9 150 s[1] = '\0';
IKobayashi 0:f291337e7ce9 151 strcat(gpsout, s);
IKobayashi 0:f291337e7ce9 152 if (c == '\n') {
IKobayashi 0:f291337e7ce9 153 break;
IKobayashi 0:f291337e7ce9 154 }
IKobayashi 0:f291337e7ce9 155 }
IKobayashi 0:f291337e7ce9 156 pc.printf(gpsout);
IKobayashi 0:f291337e7ce9 157 led1 = !led1;
IKobayashi 0:f291337e7ce9 158 }
IKobayashi 0:f291337e7ce9 159 }
IKobayashi 0:f291337e7ce9 160 */