2020/08/31 bmx055のライブラリ及びプログラム内容を一部変更. 変換レートを更新する必要あり?
Dependencies: mbed BMX055_rev2 SDFileSystem GPS_Interface
Diff: main.cpp
- Revision:
- 0:34d043558630
- Child:
- 1:4c7bace668f6
diff -r 000000000000 -r 34d043558630 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Aug 19 01:29:35 2020 +0000 @@ -0,0 +1,197 @@ +#include "mbed.h" +#include "BMX055.h" +#include "SDFileSystem.h" +//#include "IM920.h" + + +Serial gps(PA_9, PA_10); // tx, rx +DigitalIn FlightPin(PB_0); +//DigitalOut myled(LED1); +DigitalOut fet1(PA_8); //MOSFET PIN:GATE +DigitalOut fet2(PA_11); +BMX055 bmx(PB_7,PB_6);//SDA,SCL +SDFileSystem sd(PA_7, PA_6, PA_5, PA_4, "sd"); // the pinout on the mbed Cool Components workshop board +//IM920 im920(PA_2,PA_3,PA_0,PA_1); +Ticker warikomi; +Timeout t; +//double a[3],b[3],c[3]; + +//Serial gps(PA_9, PA_10); // tx, rxD +int i,rlock,mode; +char ns,ew; +float w_time;//,hokui,tokei; +float hokui,tokei; +float g_hokui,g_tokei; +float d_hokui,m_hokui,d_tokei,m_tokei; +char gps_data[256]; +char str[256]; +//,gps2_data[256]; + +void getGPS(float *hokui_n,float *tokei_n); +//void callback (); +void FlightPinDriver(); +void nichrome_ON(); +void buzzer(); + +//void getGPS(); + +int main() { + + float *hokui_n,*tokei_n; + + mkdir("/sd/mydir00", 0777); + FILE *fp = fopen("/sd/mydir00/sdtest.txt", "w"); + if(fp == NULL) { + error("Could not open file for write\n"); + } + + //pc.printf("*** GPS GT-720F ***");//GPS作動 + gps.baud(9600); + //pc.baud(9600); + //gps.attach(getGPS(&hokui_n,&tokei_n),Serial::RxIrq); + warikomi.attach(&FlightPinDriver,0.5); + + + while(1) { + getGPS(hokui_n,tokei_n); + bmx.getAcc(); + bmx.getGyro(); + bmx.getMag(); + /* for(int i=0;i<=3;i++){ + a[i]=(bmx.accel[i]/512)*9.8; + b[i]=(bmx.gyroscope[i]*125)/2048; + c[i]=bmx.magnet[i]; + }*/ + fprintf(fp,"北緯:%f,東経:%f,加速度:%f,%f,%f,ジャイロ:%2.4f,%2.4f,%2.4f,地磁気:%2.4f,%2.4f,%2.4f\n\r",hokui_n,tokei_n,(bmx.accel[0]/512)*9.8,(bmx.accel[1]/512)*9.8,(bmx.accel[2]/512)*9.8,(bmx.gyroscope[0]*125)/2048,(bmx.gyroscope[1]*125)/2048,(bmx.gyroscope[2]*125)/2048,bmx.magnet[0],bmx.magnet[1],bmx.magnet[2]); +/* im920.init(); + im920.attach(callback); + im920.poll(); + //char hokui_c=char(hokui_n); + sprintf(str,"北緯:%f,東経:%f,加速度:%f,%f,%f,ジャイロ:%2.4f,%2.4f,%2.4f,地磁気:%2.4f,%2.4f,%2.4f\n\r",hokui_n,tokei_n,(bmx.accel[0]/512)*9.8,(bmx.accel[1]/512)*9.8,(bmx.accel[2]/512)*9.8,(bmx.gyroscope[0]*125)/2048,(bmx.gyroscope[1]*125)/2048,(bmx.gyroscope[2]*125)/2048,bmx.magnet[0],bmx.magnet[1],bmx.magnet[2]); + im920.send(str,256); */ //64-69はIM関連 + wait(0.2); + } + + /* while(t<3){//テグスカットまでの時間 + printf("waiting..."); + } + if(t==3){ + printf("テグスカット!"); + fet1=1; + } + while(t<6){ + printf("waiting..."); + } + if(t==6){ + printf("テグスカットEND"); + fet1=0; + } + while(t<9){ + printf("waiting..."); + } + if(t==9){ + printf("ブザー"); + fet2=1; + } + }*/ + + fclose(fp); + + + + /*while(FlightPin==0) { //Flight Pin作動 + printf("waiting\n\r"); + wait(0.5); + }*/ + /*if(FlightPin==1){ + printf("Flight Pin Worked!!"); + } + + fet1=0; + fet2=0; + wait(3);//テグスカットまでの時間 + fet1=1; + wait(3);//テグスカット中 + + fet1=0; + wait(3);//ブザー作動までの時間 + + fet2=1;//ブザー*/ + fclose(fp); + + return 0; + + } + + +void getGPS(float *hokui_n,float *tokei_n) { //関数getGPS定義 + unsigned char c = gps.getc(); + if( c=='$' || i == 256){ + mode = 0; + i = 0; + } + if(mode==0){ + if((gps_data[i]=c) != '\r'){ + i++; + }else{ + gps_data[i]='\0'; + // pc.printf("%s\r\n",gps_data); + if( sscanf(gps_data, "$GPGGA,%f,%f,%c,%f,%c,%d",&w_time,&hokui,&ns,&tokei,&ew,&rlock) >= 1){ + if(rlock==1){ + // pc.printf("Status:Lock(%d)\n\r",rlock); + //logitude + d_tokei= int(tokei/100); + m_tokei= (tokei-d_tokei*100)/60; + g_tokei= d_tokei+m_tokei; + //pc.printf("Log:%4.5f,",g_tokei); //Latitude + d_hokui=int(hokui/100); + m_hokui=(hokui-d_hokui*100)/60; + g_hokui=d_hokui+m_hokui; + // pc.printf("Lat:%4.5f\n\r",g_hokui); + + *hokui_n=g_hokui; + *tokei_n=g_tokei; + } + //else{ + //pc.printf("\n\rStatus:unLock(%d)\n\r",rlock); + //pc.printf("%s",gps_data); + //} + }//if + *hokui_n=hokui; + *tokei_n=tokei; + } //else + } //L.16 if + } + +void callback () { + int i; + char buf[65]; + + //i = im920.recv(buf, 64); + buf[i] = 0; + printf("recv: '%s' (%d)\r\n", buf, i); +} + +void FlightPinDriver(){ + + if(FlightPin==1){ + printf("Flight Pin Worked!!"); + warikomi.detach(); + t.attach(nichrome_ON,3);//ニクロムを作動させるまでの時間 + } + + } + +void nichrome_ON(){ + printf("テグスカット!\n\r"); + fet1=1; + wait(2.0);//テグスを切るまでにかかる時間 + fet1=0; + t.detach(); + t.attach(buzzer,6);//ブザー作動までの時間 + } + +void buzzer(){ + printf("ブザー作動\n\r"); + fet2=1; + } \ No newline at end of file