kk
Dependencies: SDFileSystem mbed
Fork of cansat_kk by
main.cpp
- Committer:
- mosukro
- Date:
- 2016-02-29
- Revision:
- 3:efaa785283a6
- Parent:
- 2:be9046fb5859
- Child:
- 4:cfaf33b2c97a
File content as of revision 3:efaa785283a6:
#include "mbed.h" #include "SDFileSystem.h" Ticker timer; SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the mbed Cool Components workshop board Serial gps(p28, p27); // tx, rx Serial pc(USBTX, USBRX); // tx, rx PwmOut moterl(p21);//左モーター PwmOut moterr(p22);//右モーター DigitalOut led1(LED1); DigitalOut fet3(p23);//ニクロム線 DigitalOut led2(LED2); DigitalOut led3(LED3); DigitalOut led4(LED4); DigitalOut janpa1(p19);//パラシュートの開きを検知 DigitalIn janpa2(p20);//パラシュートの開きを検知 char gps_data[256]; float longitude,latitude,gpstime,knot,angle; int i=0; char *gps_target = "$GPRMC,174813.000,A,3606.9349,N,13927.4196,E,0.42,221.65,280216,,,A*6D"; float longitude_target,latitude_target,gpstime_target,knot_target,angle_target; int count=0; void gps_rx()//GPSデータ受信割り込み { gps_data[i] = gps.getc(); if( gps_data[i] == '$' ) { //$から受信データを保持する gps_data[0] = '$'; i = 1; } else if( gps_data[i-1] == '\r' && gps_data[i] == '\n' ) { // 改行コードまでのデータを解析する gps_data[i+1] = '\0'; if(memcmp(gps_data, "$GPRMC",6) == 0) { // $GPRMCで始ってればデータを分けて格納 sscanf(gps_data,"$GPRMC,%f,A,%f,N,%f,E,%f,%f",&gpstime,&longitude,&latitude,&knot,&angle); } //データをSDに書き込み mkdir("/sd/mydir", 0777); FILE *fp = fopen("/sd/mydir/gpsdata.txt", "a"); if(fp == NULL) { error("Could not open file for write\n"); } fprintf(fp,"%s \n",gps_data); fclose(fp); //PCにデータ送信 pc.printf("%s \n",gps_data); i = 0; } else { //改行コードが来るまでカウントを続ける i++; if(i==255) { pc.printf("*** Error! ***\n"); } } } void move() { //動作 switch (count) { case 0: //パラシュートを焼き切るまで待つ //焼き切ったらcount+1 break; case 1: //落ちてパラシュートを焼き切った後 if( (angle_target+3)>=angle || (angle_target-3)<=angle )//3は適当な数字。誤差範囲 { //角度が合ったらcount+1 } else { //角度が合うまで回転 if(angle_target>=angle) { //differ_angle=angle_target-angle; //moterlを動かす } else if(angle>=angle_target) { //differ_angle=angle-angle_target; //moterrを動かす } } break; case 2: //目標地点の近くまで走行 //目標地点に近づいたらcount+1 break; case 3: //動作を停止。割り込みも停止させ、回収待ち //moterl=moterr=0; //ngps.detach(); break; default: break; } } int main() { gps.baud(9600); gps.attach(gps_rx, Serial::RxIrq);//GPS割り込み sscanf(gps_target,"$GPRMC,%f,A,%f,N,%f,E,%f,%f",&gpstime_target,&longitude_target,&latitude_target,&knot_target,&angle_target); while(1) { move(); } }