kk
Dependencies: SDFileSystem mbed
Fork of cansat_kk by
Diff: main.cpp
- Revision:
- 1:fa44a6246bcc
- Parent:
- 0:649fc30be6ec
- Child:
- 2:be9046fb5859
--- a/main.cpp Mon Feb 29 11:10:31 2016 +0000 +++ b/main.cpp Mon Feb 29 17:05:54 2016 +0000 @@ -3,7 +3,7 @@ Ticker timer; SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the mbed Cool Components workshop board -Serial gp(p28, p27); // tx, rx +Serial gps(p28, p27); // tx, rx Serial pc(USBTX, USBRX); // tx, rx PwmOut moterl(p21);//左モーター PwmOut moterr(p22);//右モーター @@ -14,86 +14,67 @@ DigitalOut led4(LED4); DigitalOut janpa1(p19);//パラシュートの開きを検知 DigitalIn janpa2(p20);//パラシュートの開きを検知 -int gosa; -char gpsc[100]; -int a,b,c,d; +char gps_data[256]; +float longitude,latitude,gpstime,knot,angle; int i=0; -void gps() +void gps_rx()//GPSデータ受信割り込み { - led1 = 1; - - printf("Hello World!\n"); - - mkdir("/sd/mydir", 0777); - FILE *fp = fopen("/sd/mydir/sdtest.txt", "a"); - if(fp == NULL) { - error("Could not open file for write\n"); - } + 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); - led1 = 0; - led2 = 1; - while(i!=50) - { fputc(gp.getc(),fp); - i++; } - fputc(a,fp); - - fclose(fp); - - led1 = 0; -} + //PCにデータ送信 + pc.printf("%s \n",gps_data); + i = 0; + } + else + { + //改行コードが来るまでカウントを続ける + i++; + if(i==255){ + pc.printf("*** Error! ***\n"); + } + } - -void start() -{ - janpa1=1; - while(janpa2 == 1) - { led4 = 0; - led3 = 1;}//2 - } - - -void nikuromu() +void move() { - led4=1; - fet3=1;//3 - wait(60);//焼き切り時間 - led4=0; - led3=0; - led2=1;//4 + //動作 } - -void moter() { + +int main() +{ + gps.baud(9600); + gps.attach(gps_rx, Serial::RxIrq);//GPS割り込み + while(1) { - float offset=0.0; - float offset2=0.0; - moterl.period(0.02); // 周期 - moterr.period(0.02); - moterl.pulsewidth(0.08); // servo position determined by a pulsewidth between 1-2ms - moterr.pulsewidth(0.08); //パルス幅 - - + move(); } - led2=led3=led4=1; - wait(1.0); - led2=led3=led4=0; - wait(1.0); - led2=led3=led4=1; + } - -int main() -{ - gp.baud(9600); - timer.attach(&gps, 2.0);//割り込み - led4 = 1; - start(); - wait(60);//落下中 - nikuromu(); - moter(); - - return 0; -}