kk

Dependencies:   SDFileSystem mbed

Fork of cansat_kk by monoCanSat

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