/ ̄\                |     |                  \_/                  |               /  ̄  ̄ \             /  \ /  \            /   ⌒   ⌒   \            |    (__人__)     |            \    ` ⌒´    /            / ̄ ̄ ̄ ̄ ̄ ̄ ̄ \

Dependencies:   mbed BMP280_SPI ADXL345 MPU9250_SPI GPS FATFileSystem

Committer:
IKobayashi
Date:
Mon Mar 16 14:22:11 2020 +0000
Revision:
6:49b2f2583f31
Parent:
0:56002cd6879d
for_stm

Who changed what in which revision?

UserRevisionLine numberNew contents of line
IKobayashi 0:56002cd6879d 1 /*
IKobayashi 0:56002cd6879d 2 説明
IKobayashi 0:56002cd6879d 3 Nucleo-F303K8とGPSモジュールを使ったサンプルプログラム.
IKobayashi 0:56002cd6879d 4
IKobayashi 0:56002cd6879d 5 使用GPS
IKobayashi 0:56002cd6879d 6 http://akizukidenshi.com/catalog/g/gK-09991/
IKobayashi 0:56002cd6879d 7
IKobayashi 0:56002cd6879d 8 参考
IKobayashi 0:56002cd6879d 9 http://www.hiramine.com/physicalcomputing/general/gps_nmeaformat.html
IKobayashi 0:56002cd6879d 10
IKobayashi 0:56002cd6879d 11 なにするだー
IKobayashi 0:56002cd6879d 12
IKobayashi 0:56002cd6879d 13
IKobayashi 0:56002cd6879d 14 以下ピン配置
IKobayashi 0:56002cd6879d 15 Nucleo GPSモジュール
IKobayashi 0:56002cd6879d 16 GND-----GND-----------0V
IKobayashi 0:56002cd6879d 17 5V------VIN
IKobayashi 0:56002cd6879d 18 D0------TX
IKobayashi 0:56002cd6879d 19 D1------RX
IKobayashi 0:56002cd6879d 20 */
IKobayashi 0:56002cd6879d 21
IKobayashi 0:56002cd6879d 22 #include "mbed.h"
IKobayashi 0:56002cd6879d 23 #include "USBSerial.h"
IKobayashi 0:56002cd6879d 24
IKobayashi 0:56002cd6879d 25 DigitalOut myled(PC_13);
IKobayashi 0:56002cd6879d 26 Serial gps(PB_6,PB_7); // tx, rx
IKobayashi 0:56002cd6879d 27 //Serial pc(USBTX, USBRX); // tx, rx
IKobayashi 0:56002cd6879d 28 USBSerial pc;
IKobayashi 0:56002cd6879d 29
IKobayashi 0:56002cd6879d 30 int i,rlock,mode;
IKobayashi 0:56002cd6879d 31 char gps_data[256];
IKobayashi 0:56002cd6879d 32 char ns,ew;
IKobayashi 0:56002cd6879d 33 float w_time,hokui,tokei;
IKobayashi 0:56002cd6879d 34 float g_hokui,g_tokei;
IKobayashi 0:56002cd6879d 35 float d_hokui,m_hokui,d_tokei,m_tokei;
IKobayashi 0:56002cd6879d 36 unsigned char c;
IKobayashi 0:56002cd6879d 37 int stlgt;
IKobayashi 0:56002cd6879d 38 char status;
IKobayashi 0:56002cd6879d 39 float velocity, direction;
IKobayashi 0:56002cd6879d 40 int date;
IKobayashi 0:56002cd6879d 41
IKobayashi 0:56002cd6879d 42 void getGPS() {
IKobayashi 0:56002cd6879d 43 c = gps.getc();
IKobayashi 0:56002cd6879d 44 if( c=='$' || i == 256){
IKobayashi 0:56002cd6879d 45 mode = 0;
IKobayashi 0:56002cd6879d 46 i = 0;
IKobayashi 0:56002cd6879d 47 for(int j=0; j<256; j++){
IKobayashi 0:56002cd6879d 48 gps_data[j]=NULL;
IKobayashi 0:56002cd6879d 49 }
IKobayashi 0:56002cd6879d 50 }
IKobayashi 0:56002cd6879d 51 if(mode==0){
IKobayashi 0:56002cd6879d 52 if((gps_data[i]=c) != '\r'){
IKobayashi 0:56002cd6879d 53 i++;
IKobayashi 0:56002cd6879d 54 }else{
IKobayashi 0:56002cd6879d 55 gps_data[i]='\0';
IKobayashi 0:56002cd6879d 56
IKobayashi 0:56002cd6879d 57 pc.printf(gps_data);
IKobayashi 0:56002cd6879d 58 pc.printf("\r\n");
IKobayashi 0:56002cd6879d 59
IKobayashi 0:56002cd6879d 60 if(sscanf(gps_data, "$GPGGA,%f,%f,%c,%f,%c,%d,%d",&w_time,&hokui,&ns,&tokei,&ew,&rlock,&stlgt) >= 1){
IKobayashi 0:56002cd6879d 61 if(rlock==1){
IKobayashi 0:56002cd6879d 62 //logitude
IKobayashi 0:56002cd6879d 63 d_tokei= int(tokei/100);
IKobayashi 0:56002cd6879d 64 m_tokei= (tokei-d_tokei*100)/60;
IKobayashi 0:56002cd6879d 65 g_tokei= d_tokei+m_tokei;
IKobayashi 0:56002cd6879d 66 //Latitude
IKobayashi 0:56002cd6879d 67 d_hokui=int(hokui/100);
IKobayashi 0:56002cd6879d 68 m_hokui=(hokui-d_hokui*100)/60;
IKobayashi 0:56002cd6879d 69 g_hokui=d_hokui+m_hokui;
IKobayashi 0:56002cd6879d 70
IKobayashi 0:56002cd6879d 71 float timenow = w_time;
IKobayashi 0:56002cd6879d 72 int hour = timenow / 10000;
IKobayashi 0:56002cd6879d 73 timenow = fmod(timenow, 10000);
IKobayashi 0:56002cd6879d 74 int min = timenow / 100;
IKobayashi 0:56002cd6879d 75 timenow = fmod(timenow, 100);
IKobayashi 0:56002cd6879d 76 int sec = timenow / 1;
IKobayashi 0:56002cd6879d 77 timenow = fmod(timenow, 1);
IKobayashi 0:56002cd6879d 78
IKobayashi 0:56002cd6879d 79 // /*
IKobayashi 0:56002cd6879d 80 // 10進法(google)
IKobayashi 0:56002cd6879d 81 pc.printf("世界標準時:%02dh%02dm%02ds 北緯:%.8f 東経:%.8f 状態:%d 使用衛星数:%d\r\n",
IKobayashi 0:56002cd6879d 82 hour, min, sec, g_hokui, g_tokei, rlock, stlgt);
IKobayashi 0:56002cd6879d 83 // */
IKobayashi 0:56002cd6879d 84 /*
IKobayashi 0:56002cd6879d 85 // 60進法(x時y分z秒w)
IKobayashi 0:56002cd6879d 86 pc.printf("s世界標準時:%02dh%02dm%02ds 北緯:%.8f 東経:%.8f 状態:%d 使用衛星数:%d\r\n",
IKobayashi 0:56002cd6879d 87 hour, min, sec, hokui/100, tokei/100, rlock, stlgt);
IKobayashi 0:56002cd6879d 88 */
IKobayashi 0:56002cd6879d 89 }
IKobayashi 0:56002cd6879d 90 else{
IKobayashi 0:56002cd6879d 91 float timenow = w_time;
IKobayashi 0:56002cd6879d 92 int hour = timenow / 10000;
IKobayashi 0:56002cd6879d 93 timenow = fmod(timenow, 10000);
IKobayashi 0:56002cd6879d 94 int min = timenow / 100;
IKobayashi 0:56002cd6879d 95 timenow = fmod(timenow, 100);
IKobayashi 0:56002cd6879d 96 int sec = timenow / 1;
IKobayashi 0:56002cd6879d 97 timenow = fmod(timenow, 1);
IKobayashi 0:56002cd6879d 98
IKobayashi 0:56002cd6879d 99 pc.printf("# 世界標準時e:%02dh%02dm%02d 状態:%d 使用衛星数:%d\r\n",
IKobayashi 0:56002cd6879d 100 hour, min, sec, rlock, stlgt);
IKobayashi 0:56002cd6879d 101 }
IKobayashi 0:56002cd6879d 102 sprintf(gps_data, "");
IKobayashi 0:56002cd6879d 103 }//if
IKobayashi 0:56002cd6879d 104
IKobayashi 0:56002cd6879d 105 /* ------------------------------ */
IKobayashi 0:56002cd6879d 106 if(sscanf(gps_data, "$GPRMC,%f,%f,%f,%d",&w_time,&velocity,&direction,&date) >= 1){
IKobayashi 0:56002cd6879d 107 if(rlock==1){
IKobayashi 0:56002cd6879d 108
IKobayashi 0:56002cd6879d 109 float timenow = w_time;
IKobayashi 0:56002cd6879d 110 int hour = timenow / 10000;
IKobayashi 0:56002cd6879d 111 timenow = fmod(timenow, 10000);
IKobayashi 0:56002cd6879d 112 int min = timenow / 100;
IKobayashi 0:56002cd6879d 113 timenow = fmod(timenow, 100);
IKobayashi 0:56002cd6879d 114 int sec = timenow / 1;
IKobayashi 0:56002cd6879d 115 timenow = fmod(timenow, 1);
IKobayashi 0:56002cd6879d 116
IKobayashi 0:56002cd6879d 117 float v_mps = velocity * 1852 / 3600;
IKobayashi 0:56002cd6879d 118
IKobayashi 0:56002cd6879d 119 // /*
IKobayashi 0:56002cd6879d 120 // 10進法(google)
IKobayashi 0:56002cd6879d 121 pc.printf("世界標準時:%02dh%02dm%02ds 速度:%f[mps] 方位:%f, 日付:20%02d年%02d月%02d日\r\n",
IKobayashi 0:56002cd6879d 122 hour,min,sec,v_mps,direction,date%100,(date/100)%100, date/10000);
IKobayashi 0:56002cd6879d 123 // */
IKobayashi 0:56002cd6879d 124 /*
IKobayashi 0:56002cd6879d 125 // 60進法(x時y分z秒w)
IKobayashi 0:56002cd6879d 126 pc.printf("世界標準時:%02dh%02dm%02ds 速度:%f[mps] 方位:%f, 日付:20%02d年%02d月%02d日\r\n",
IKobayashi 0:56002cd6879d 127 hour,min,sec,velocity,direction,date%100,(date/100)%100, date/10000);
IKobayashi 0:56002cd6879d 128 */
IKobayashi 0:56002cd6879d 129 }
IKobayashi 0:56002cd6879d 130 else{
IKobayashi 0:56002cd6879d 131 float timenow = w_time;
IKobayashi 0:56002cd6879d 132 int hour = timenow / 10000;
IKobayashi 0:56002cd6879d 133 timenow = fmod(timenow, 10000);
IKobayashi 0:56002cd6879d 134 int min = timenow / 100;
IKobayashi 0:56002cd6879d 135 timenow = fmod(timenow, 100);
IKobayashi 0:56002cd6879d 136 int sec = timenow / 1;
IKobayashi 0:56002cd6879d 137 timenow = fmod(timenow, 1);
IKobayashi 0:56002cd6879d 138
IKobayashi 0:56002cd6879d 139 pc.printf("# 世界標準時:%02dh%02dm%02ds 速度:%f[knot] 方位:%f, 日付:20%02d年%02d月%02d日\r\n",
IKobayashi 0:56002cd6879d 140 hour,min,sec,velocity,direction,date%100,(date/100)%100, date/10000);
IKobayashi 0:56002cd6879d 141 }
IKobayashi 0:56002cd6879d 142 sprintf(gps_data, "");
IKobayashi 0:56002cd6879d 143 }//if
IKobayashi 0:56002cd6879d 144
IKobayashi 0:56002cd6879d 145 pc.printf("\r\n");
IKobayashi 0:56002cd6879d 146 }
IKobayashi 0:56002cd6879d 147 }
IKobayashi 0:56002cd6879d 148 }
IKobayashi 0:56002cd6879d 149
IKobayashi 0:56002cd6879d 150 int main(){
IKobayashi 0:56002cd6879d 151 pc.printf("*** GPS GT-720F ***\r\n");
IKobayashi 0:56002cd6879d 152 gps.baud(9600);
IKobayashi 0:56002cd6879d 153 // pc.baud(115200);
IKobayashi 0:56002cd6879d 154 gps.attach(getGPS,Serial::RxIrq);
IKobayashi 0:56002cd6879d 155 while(1) {/*gps.attach(getGPS,Serial::RxIrq)*/}
IKobayashi 0:56002cd6879d 156 }
IKobayashi 0:56002cd6879d 157
IKobayashi 0:56002cd6879d 158
IKobayashi 0:56002cd6879d 159 /* --- 生データ取得用 --- */
IKobayashi 0:56002cd6879d 160 /*
IKobayashi 0:56002cd6879d 161 #include "mbed.h"
IKobayashi 0:56002cd6879d 162
IKobayashi 0:56002cd6879d 163 Serial gps(p9, p10); // TX, RX
IKobayashi 0:56002cd6879d 164 Serial pc(USBTX, USBRX); // TX, RX
IKobayashi 0:56002cd6879d 165 DigitalOut led1(LED1);
IKobayashi 0:56002cd6879d 166
IKobayashi 0:56002cd6879d 167 int main() {
IKobayashi 0:56002cd6879d 168 pc.baud(115200);
IKobayashi 0:56002cd6879d 169 pc.printf("PA6C DEMO\n");
IKobayashi 0:56002cd6879d 170 char gpsout[1024];
IKobayashi 0:56002cd6879d 171 while (1) {
IKobayashi 0:56002cd6879d 172 gpsout[0] = '\0';
IKobayashi 0:56002cd6879d 173 while (1) {
IKobayashi 0:56002cd6879d 174 char c = gps.getc();
IKobayashi 0:56002cd6879d 175 char s[2];
IKobayashi 0:56002cd6879d 176 s[0] = c;
IKobayashi 0:56002cd6879d 177 s[1] = '\0';
IKobayashi 0:56002cd6879d 178 strcat(gpsout, s);
IKobayashi 0:56002cd6879d 179 if (c == '\n') {
IKobayashi 0:56002cd6879d 180 break;
IKobayashi 0:56002cd6879d 181 }
IKobayashi 0:56002cd6879d 182 }
IKobayashi 0:56002cd6879d 183 pc.printf(gpsout);
IKobayashi 0:56002cd6879d 184 led1 = !led1;
IKobayashi 0:56002cd6879d 185 }
IKobayashi 0:56002cd6879d 186 }
IKobayashi 0:56002cd6879d 187 */