2020/08/26 地磁気センサは今回のミッションでは不要と判断したので廃した.加速度と角加速度を16進数で送信することに成功.各軸ごとに2バイト(16進数4桁)を割り当てて,合計12バイトで送信

Dependencies:   mbed BMX055_rev2 SDFileSystem

Revision:
0:34d043558630
Child:
1:4c7bace668f6
--- /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