ロガー

Dependencies:   MPU6050 MS5607 mbed

main.cpp

Committer:
mikawataru
Date:
2017-02-08
Revision:
0:f93d0be13473

File content as of revision 0:f93d0be13473:

#include "mbed.h"
#include "MPU6050.h"
#include "MS5607I2C.h"

DigitalOut led_st(p19);
DigitalOut led_act(p20);
DigitalIn sw(p21);
MPU6050 mpu(p9,p10);
MS5607I2C ms5607(p9, p10, false);
Serial gps(p28,p27);
Serial pc(USBTX, USBRX);

char gps_data[256];
int i,rlock,mode;
float a[3];
float g[3];
float pressure,temperature,altitude;

void getGPS();
void standby();
void action();

int main() {
   mpu.setAcceleroRange(0);
   mpu.setGyroRange(0);
   gps.baud(9600);
   gps.attach(getGPS,Serial::RxIrq);
   while(1){
      if(sw)action();
      else standby();
   }
}

void standby(){
   led_act = 0;
   led_st = 1;
   pc.printf("mode(standby):%6.2f\t%6.2f\t%6.2f\r\n",ms5607.getPressure(),ms5607.getTemperature(),ms5607.getAltitude());
   wait(3);
}
void action(){
   led_act = 1;
   led_st = 0;
   mpu.getAccelero(a);
   mpu.getGyro(g);
   pressure = ms5607.getPressure();
   temperature = ms5607.getTemperature();
   altitude = ms5607.getAltitude();
   pc.printf("mode(action):%4.3f,%4.3f,%4.3f,%4.3f,%4.3f,%4.3f,%6.2f,%6.2f,%6.2f\r\n",a[0],a[1],a[2],g[0],g[1],g[2],pressure,temperature,altitude);
}

void getGPS() {
   unsigned char c = gps.getc();
   if( c=='$' || i == 256){
      mode = 0;
      i = 0;
      sprintf(gps_data,"");
   }
   if(mode==0){
      char ns,ew;
      float w_time,hokui,tokei;
      float g_hokui,g_tokei;
      float d_hokui,m_hokui,d_tokei,m_tokei;
      if((gps_data[i]=c) != '\r'){
         i++;
      }else{
         gps_data[i]='\0';
         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;
               //Latitude
               d_hokui=int(hokui/100);
               m_hokui=(hokui-d_hokui*100)/60;
               g_hokui=d_hokui+m_hokui;
               pc.printf("Lon:%.6f, Lat:%.6f\n\r",g_tokei, g_hokui);
            }
            else{
               pc.printf("\n\rStatus:unLock(%d)\n\r",rlock);
               pc.printf("%s\r\n",gps_data);
            }
            sprintf(gps_data, "");
         }//if
      }
   }
}