cansat

Dependencies:   SDFileSystem mbed

Committer:
Nike3221
Date:
Wed Mar 02 10:19:53 2016 +0000
Revision:
5:85c3dff1be3f
Parent:
4:840a96a81c08
cansat

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Nike3221 0:649fc30be6ec 1 #include "mbed.h"
Nike3221 0:649fc30be6ec 2 #include "SDFileSystem.h"
Nike3221 0:649fc30be6ec 3
Nike3221 0:649fc30be6ec 4 Ticker timer;
Nike3221 5:85c3dff1be3f 5 //SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the mbed Cool Components workshop board
Nike3221 0:649fc30be6ec 6 Serial gp(p28, p27); // tx, rx
Nike3221 0:649fc30be6ec 7 Serial pc(USBTX, USBRX); // tx, rx
Nike3221 1:a2629e589080 8 PwmOut moter_l(p21);//左モーター
Nike3221 1:a2629e589080 9 PwmOut moter_r(p22);//右モーター
Nike3221 0:649fc30be6ec 10 DigitalOut fet3(p23);//ニクロム線
Nike3221 0:649fc30be6ec 11 DigitalOut janpa1(p19);//パラシュートの開きを検知
Nike3221 0:649fc30be6ec 12 DigitalIn janpa2(p20);//パラシュートの開きを検知
Nike3221 5:85c3dff1be3f 13 DigitalOut led1(LED1);
Nike3221 1:a2629e589080 14 int ido_gosa,kei_gosa;
Nike3221 5:85c3dff1be3f 15 int ido_target=1000; //緯度の目標値 秒以下を入力 要設定
Nike3221 5:85c3dff1be3f 16 int kei_target=1000; //経度の目標値 秒以下を入力 要設定
Nike3221 1:a2629e589080 17 int old_ido,old_kei;
Nike3221 1:a2629e589080 18 int ido,kei;
Nike3221 1:a2629e589080 19 char gpsc[500];
Nike3221 0:649fc30be6ec 20 int a,b,c,d;
Nike3221 0:649fc30be6ec 21 int i=0;
Nike3221 0:649fc30be6ec 22
Nike3221 1:a2629e589080 23 void gps_kakiko()
Nike3221 0:649fc30be6ec 24 {
Nike3221 5:85c3dff1be3f 25 led1=1;
Nike3221 5:85c3dff1be3f 26 i=0;
Nike3221 5:85c3dff1be3f 27 mkdir("/sd/gps", 0777);
Nike3221 5:85c3dff1be3f 28 FILE *fp = fopen("/sd/gps/gps.txt", "w");
Nike3221 0:649fc30be6ec 29 if(fp == NULL) {
Nike3221 0:649fc30be6ec 30 error("Could not open file for write\n");
Nike3221 0:649fc30be6ec 31 }
Nike3221 1:a2629e589080 32
Nike3221 0:649fc30be6ec 33 while(i!=50)
Nike3221 1:a2629e589080 34 { fputc(gp.getc(),fp);//sdに50文字づつ書き込み
Nike3221 0:649fc30be6ec 35 i++; }
Nike3221 0:649fc30be6ec 36
Nike3221 0:649fc30be6ec 37 fclose(fp);
Nike3221 5:85c3dff1be3f 38 led1=0;
Nike3221 5:85c3dff1be3f 39
Nike3221 1:a2629e589080 40
Nike3221 0:649fc30be6ec 41 }
Nike3221 0:649fc30be6ec 42
Nike3221 0:649fc30be6ec 43 void nikuromu()
Nike3221 0:649fc30be6ec 44 {
Nike3221 5:85c3dff1be3f 45 led1=1;
Nike3221 1:a2629e589080 46 fet3=1;
Nike3221 0:649fc30be6ec 47 wait(60);//焼き切り時間
Nike3221 0:649fc30be6ec 48 }
Nike3221 0:649fc30be6ec 49
Nike3221 4:840a96a81c08 50 void moter()
Nike3221 4:840a96a81c08 51 {
Nike3221 5:85c3dff1be3f 52 ido_gosa = kei_gosa = 20;
Nike3221 5:85c3dff1be3f 53 while(ido_gosa >= 10 && kei_gosa >= 10)
Nike3221 0:649fc30be6ec 54 {
Nike3221 1:a2629e589080 55
Nike3221 1:a2629e589080 56 a=50;
Nike3221 4:840a96a81c08 57 gpsc[a]= gp.getc();
Nike3221 1:a2629e589080 58
Nike3221 4:840a96a81c08 59 if(gpsc[a-34]=='A')//GPGGAを見つける
Nike3221 4:840a96a81c08 60 {
Nike3221 4:840a96a81c08 61 if(gpsc[a-33]=='G')
Nike3221 4:840a96a81c08 62 {
Nike3221 4:840a96a81c08 63 if(gpsc[a-32]=='G')
Nike3221 4:840a96a81c08 64 {
Nike3221 4:840a96a81c08 65 old_ido=ido;
Nike3221 4:840a96a81c08 66 old_kei=kei;
Nike3221 4:840a96a81c08 67 ido=gpsc[a-16]*1000+gpsc[a-15]*100+gpsc[a-14]*10+gpsc[a-13];
Nike3221 4:840a96a81c08 68 kei=gpsc[a-3]*1000+gpsc[a-2]*100+gpsc[a-1]*10+gpsc[a];
Nike3221 5:85c3dff1be3f 69 ido_gosa = ido_target-ido;
Nike3221 5:85c3dff1be3f 70 kei_gosa = kei_target-kei;
Nike3221 4:840a96a81c08 71 if(a>=50)
Nike3221 4:840a96a81c08 72 {a=25;}}}}
Nike3221 4:840a96a81c08 73
Nike3221 4:840a96a81c08 74 moter_l.period(0.02); // 周期
Nike3221 4:840a96a81c08 75 moter_r.period(0.02);
Nike3221 5:85c3dff1be3f 76 moter_l.pulsewidth(0.0020); //パルス幅
Nike3221 5:85c3dff1be3f 77 moter_r.pulsewidth(0.0020);
Nike3221 0:649fc30be6ec 78
Nike3221 5:85c3dff1be3f 79 if(kei_gosa >=10 && ido_gosa >=10)//先ず経度or緯度をあわせる
Nike3221 5:85c3dff1be3f 80 { moter_l.pulsewidth(0.0020);
Nike3221 5:85c3dff1be3f 81 moter_r.pulsewidth(0.0);
Nike3221 4:840a96a81c08 82 wait(5); //方向転換90° 要設定
Nike3221 5:85c3dff1be3f 83 moter_l.pulsewidth(0.0020);
Nike3221 5:85c3dff1be3f 84 moter_r.pulsewidth(0.0020);
Nike3221 4:840a96a81c08 85 wait(10); //gpsの変化待ち
Nike3221 1:a2629e589080 86
Nike3221 5:85c3dff1be3f 87 if(kei_gosa >=10 && ido_gosa >=10)
Nike3221 4:840a96a81c08 88 continue; // 方向転換をやりなおす
Nike3221 4:840a96a81c08 89 }
Nike3221 1:a2629e589080 90
Nike3221 5:85c3dff1be3f 91 if(kei_gosa >=10 && ido_gosa <=10 || kei_gosa <=10 && ido_gosa >=10)
Nike3221 5:85c3dff1be3f 92 { moter_l.pulsewidth(0.0020);
Nike3221 5:85c3dff1be3f 93 moter_r.pulsewidth(0.0020);
Nike3221 5:85c3dff1be3f 94 if(kei_gosa >=10 && ido_gosa <=10 || kei_gosa <=10 && ido_gosa >=10)
Nike3221 4:840a96a81c08 95 continue; // 進み続ける
Nike3221 4:840a96a81c08 96 }
Nike3221 4:840a96a81c08 97
Nike3221 4:840a96a81c08 98 }
Nike3221 1:a2629e589080 99 moter_l.pulsewidth(0.0);
Nike3221 1:a2629e589080 100 moter_r.pulsewidth(0.0);
Nike3221 0:649fc30be6ec 101
Nike3221 4:840a96a81c08 102
Nike3221 4:840a96a81c08 103 }
Nike3221 0:649fc30be6ec 104
Nike3221 0:649fc30be6ec 105 int main()
Nike3221 0:649fc30be6ec 106 {
Nike3221 1:a2629e589080 107 janpa1=1;
Nike3221 0:649fc30be6ec 108 gp.baud(9600);
Nike3221 5:85c3dff1be3f 109 //timer.attach(&gps_kakiko, 2.0);//割り込み
Nike3221 4:840a96a81c08 110 if(janpa2==0)//パラシュートが開き、ジャンパピンが抜けたらスタート
Nike3221 4:840a96a81c08 111 {
Nike3221 1:a2629e589080 112 wait(60);//落下中 要設定
Nike3221 0:649fc30be6ec 113 nikuromu();
Nike3221 0:649fc30be6ec 114 moter();
Nike3221 1:a2629e589080 115 }
Nike3221 0:649fc30be6ec 116 return 0;
Nike3221 0:649fc30be6ec 117 }