/ ̄\ | | \_/ | /  ̄  ̄ \ / \ / \ / ⌒ ⌒ \ | (__人__) | \ ` ⌒´ / / ̄ ̄ ̄ ̄ ̄ ̄ ̄ \
Dependencies: mbed BMP280_SPI ADXL345 MPU9250_SPI GPS FATFileSystem
main.txt@0:56002cd6879d, 2020-02-24 (annotated)
- Committer:
- IKobayashi
- Date:
- Mon Feb 24 10:06:48 2020 +0000
- Revision:
- 0:56002cd6879d
noitamina
Who changed what in which revision?
User | Revision | Line number | New 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 | */ |