/ ̄\ | | \_/ | /  ̄  ̄ \ / \ / \ / ⌒ ⌒ \ | (__人__) | \ ` ⌒´ / / ̄ ̄ ̄ ̄ ̄ ̄ ̄ \
Dependencies: mbed BMP280_SPI ADXL345 MPU9250_SPI GPS FATFileSystem
main.txt
- Committer:
- IKobayashi
- Date:
- 2020-03-16
- Revision:
- 6:49b2f2583f31
- Parent:
- 0:56002cd6879d
File content as of revision 6:49b2f2583f31:
/*
説明
Nucleo-F303K8とGPSモジュールを使ったサンプルプログラム.
使用GPS
http://akizukidenshi.com/catalog/g/gK-09991/
参考
http://www.hiramine.com/physicalcomputing/general/gps_nmeaformat.html
なにするだー
以下ピン配置
Nucleo GPSモジュール
GND-----GND-----------0V
5V------VIN
D0------TX
D1------RX
*/
#include "mbed.h"
#include "USBSerial.h"
DigitalOut myled(PC_13);
Serial gps(PB_6,PB_7); // tx, rx
//Serial pc(USBTX, USBRX); // tx, rx
USBSerial pc;
int i,rlock,mode;
char gps_data[256];
char ns,ew;
float w_time,hokui,tokei;
float g_hokui,g_tokei;
float d_hokui,m_hokui,d_tokei,m_tokei;
unsigned char c;
int stlgt;
char status;
float velocity, direction;
int date;
void getGPS() {
c = gps.getc();
if( c=='$' || i == 256){
mode = 0;
i = 0;
for(int j=0; j<256; j++){
gps_data[j]=NULL;
}
}
if(mode==0){
if((gps_data[i]=c) != '\r'){
i++;
}else{
gps_data[i]='\0';
pc.printf(gps_data);
pc.printf("\r\n");
if(sscanf(gps_data, "$GPGGA,%f,%f,%c,%f,%c,%d,%d",&w_time,&hokui,&ns,&tokei,&ew,&rlock,&stlgt) >= 1){
if(rlock==1){
//logitude
d_tokei= int(tokei/100);
m_tokei= (tokei-d_tokei*100)/60;
g_tokei= d_tokei+m_tokei;
//Latitude
d_hokui=int(hokui/100);
m_hokui=(hokui-d_hokui*100)/60;
g_hokui=d_hokui+m_hokui;
float timenow = w_time;
int hour = timenow / 10000;
timenow = fmod(timenow, 10000);
int min = timenow / 100;
timenow = fmod(timenow, 100);
int sec = timenow / 1;
timenow = fmod(timenow, 1);
// /*
// 10進法(google)
pc.printf("世界標準時:%02dh%02dm%02ds 北緯:%.8f 東経:%.8f 状態:%d 使用衛星数:%d\r\n",
hour, min, sec, g_hokui, g_tokei, rlock, stlgt);
// */
/*
// 60進法(x時y分z秒w)
pc.printf("s世界標準時:%02dh%02dm%02ds 北緯:%.8f 東経:%.8f 状態:%d 使用衛星数:%d\r\n",
hour, min, sec, hokui/100, tokei/100, rlock, stlgt);
*/
}
else{
float timenow = w_time;
int hour = timenow / 10000;
timenow = fmod(timenow, 10000);
int min = timenow / 100;
timenow = fmod(timenow, 100);
int sec = timenow / 1;
timenow = fmod(timenow, 1);
pc.printf("# 世界標準時e:%02dh%02dm%02d 状態:%d 使用衛星数:%d\r\n",
hour, min, sec, rlock, stlgt);
}
sprintf(gps_data, "");
}//if
/* ------------------------------ */
if(sscanf(gps_data, "$GPRMC,%f,%f,%f,%d",&w_time,&velocity,&direction,&date) >= 1){
if(rlock==1){
float timenow = w_time;
int hour = timenow / 10000;
timenow = fmod(timenow, 10000);
int min = timenow / 100;
timenow = fmod(timenow, 100);
int sec = timenow / 1;
timenow = fmod(timenow, 1);
float v_mps = velocity * 1852 / 3600;
// /*
// 10進法(google)
pc.printf("世界標準時:%02dh%02dm%02ds 速度:%f[mps] 方位:%f, 日付:20%02d年%02d月%02d日\r\n",
hour,min,sec,v_mps,direction,date%100,(date/100)%100, date/10000);
// */
/*
// 60進法(x時y分z秒w)
pc.printf("世界標準時:%02dh%02dm%02ds 速度:%f[mps] 方位:%f, 日付:20%02d年%02d月%02d日\r\n",
hour,min,sec,velocity,direction,date%100,(date/100)%100, date/10000);
*/
}
else{
float timenow = w_time;
int hour = timenow / 10000;
timenow = fmod(timenow, 10000);
int min = timenow / 100;
timenow = fmod(timenow, 100);
int sec = timenow / 1;
timenow = fmod(timenow, 1);
pc.printf("# 世界標準時:%02dh%02dm%02ds 速度:%f[knot] 方位:%f, 日付:20%02d年%02d月%02d日\r\n",
hour,min,sec,velocity,direction,date%100,(date/100)%100, date/10000);
}
sprintf(gps_data, "");
}//if
pc.printf("\r\n");
}
}
}
int main(){
pc.printf("*** GPS GT-720F ***\r\n");
gps.baud(9600);
// pc.baud(115200);
gps.attach(getGPS,Serial::RxIrq);
while(1) {/*gps.attach(getGPS,Serial::RxIrq)*/}
}
/* --- 生データ取得用 --- */
/*
#include "mbed.h"
Serial gps(p9, p10); // TX, RX
Serial pc(USBTX, USBRX); // TX, RX
DigitalOut led1(LED1);
int main() {
pc.baud(115200);
pc.printf("PA6C DEMO\n");
char gpsout[1024];
while (1) {
gpsout[0] = '\0';
while (1) {
char c = gps.getc();
char s[2];
s[0] = c;
s[1] = '\0';
strcat(gpsout, s);
if (c == '\n') {
break;
}
}
pc.printf(gpsout);
led1 = !led1;
}
}
*/