Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed BMX055_rev2 SDFileSystem GPS_Interface
main.cpp
- Committer:
- MatsumotoKouki
- Date:
- 2020-08-24
- Revision:
- 1:4c7bace668f6
- Parent:
- 0:34d043558630
- Child:
- 2:28ccb8bdac86
File content as of revision 1:4c7bace668f6:
#include "mbed.h"
#include "BMX055.h"
#include "SDFileSystem.h"
Serial gps(PA_9, PA_10); // tx, rx
DigitalIn FlightPin(PB_0);
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
Ticker warikomi;
Timeout t;
//double a[3],b[3],c[3];
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];
void getGPS(float *hokui_n,float *tokei_n);
//void callback ();
void FlightPinDriver();
void nichrome_ON();
void buzzer();
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");
}
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]);
wait(0.2);
}
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;
}