always GPS 0

Dependencies:   mbed BMX055_rev2 SDFileSystem

main.cpp

Committer:
MatsumotoKouki
Date:
2020-08-19
Revision:
0:34d043558630
Child:
1:4c7bace668f6

File content as of revision 0:34d043558630:

#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;
    }