cansat

Dependencies:   SDFileSystem mbed

Committer:
Nike3221
Date:
Mon Feb 29 15:07:08 2016 +0000
Revision:
4:840a96a81c08
Parent:
3:6ea7473e7072
Child:
5:85c3dff1be3f
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 0:649fc30be6ec 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 1:a2629e589080 13 int ido_gosa,kei_gosa;
Nike3221 1:a2629e589080 14 int ido_goal=1000; //緯度の目標値 秒以下を入力 要設定
Nike3221 1:a2629e589080 15 int kei_goal=1000; //経度の目標値 秒以下を入力 要設定
Nike3221 1:a2629e589080 16 int old_ido,old_kei;
Nike3221 1:a2629e589080 17 int ido,kei;
Nike3221 1:a2629e589080 18 char gpsc[500];
Nike3221 0:649fc30be6ec 19 int a,b,c,d;
Nike3221 0:649fc30be6ec 20 int i=0;
Nike3221 0:649fc30be6ec 21
Nike3221 1:a2629e589080 22 void gps_kakiko()
Nike3221 0:649fc30be6ec 23 {
Nike3221 1:a2629e589080 24
Nike3221 0:649fc30be6ec 25 mkdir("/sd/mydir", 0777);
Nike3221 0:649fc30be6ec 26 FILE *fp = fopen("/sd/mydir/sdtest.txt", "a");
Nike3221 0:649fc30be6ec 27 if(fp == NULL) {
Nike3221 0:649fc30be6ec 28 error("Could not open file for write\n");
Nike3221 0:649fc30be6ec 29 }
Nike3221 1:a2629e589080 30
Nike3221 0:649fc30be6ec 31 while(i!=50)
Nike3221 1:a2629e589080 32 { fputc(gp.getc(),fp);//sdに50文字づつ書き込み
Nike3221 0:649fc30be6ec 33 i++; }
Nike3221 0:649fc30be6ec 34
Nike3221 0:649fc30be6ec 35 fclose(fp);
Nike3221 1:a2629e589080 36
Nike3221 0:649fc30be6ec 37 }
Nike3221 0:649fc30be6ec 38
Nike3221 0:649fc30be6ec 39 void nikuromu()
Nike3221 0:649fc30be6ec 40 {
Nike3221 1:a2629e589080 41 fet3=1;
Nike3221 0:649fc30be6ec 42 wait(60);//焼き切り時間
Nike3221 0:649fc30be6ec 43 }
Nike3221 0:649fc30be6ec 44
Nike3221 4:840a96a81c08 45 void moter()
Nike3221 4:840a96a81c08 46 {
Nike3221 1:a2629e589080 47
Nike3221 3:6ea7473e7072 48 while(ido_gosa >= 10 && ido_gosa >= 10)
Nike3221 0:649fc30be6ec 49 {
Nike3221 1:a2629e589080 50
Nike3221 1:a2629e589080 51 a=50;
Nike3221 4:840a96a81c08 52 gpsc[a]= gp.getc();
Nike3221 1:a2629e589080 53
Nike3221 4:840a96a81c08 54 if(gpsc[a-34]=='A')//GPGGAを見つける
Nike3221 4:840a96a81c08 55 {
Nike3221 4:840a96a81c08 56 if(gpsc[a-33]=='G')
Nike3221 4:840a96a81c08 57 {
Nike3221 4:840a96a81c08 58 if(gpsc[a-32]=='G')
Nike3221 4:840a96a81c08 59 {
Nike3221 4:840a96a81c08 60 old_ido=ido;
Nike3221 4:840a96a81c08 61 old_kei=kei;
Nike3221 4:840a96a81c08 62 ido=gpsc[a-16]*1000+gpsc[a-15]*100+gpsc[a-14]*10+gpsc[a-13];
Nike3221 4:840a96a81c08 63 kei=gpsc[a-3]*1000+gpsc[a-2]*100+gpsc[a-1]*10+gpsc[a];
Nike3221 1:a2629e589080 64
Nike3221 4:840a96a81c08 65 if(a>=50)
Nike3221 4:840a96a81c08 66 {a=25;}}}}
Nike3221 4:840a96a81c08 67
Nike3221 4:840a96a81c08 68 moter_l.period(0.02); // 周期
Nike3221 4:840a96a81c08 69 moter_r.period(0.02);
Nike3221 4:840a96a81c08 70 moter_l.pulsewidth(0.08); //パルス幅
Nike3221 4:840a96a81c08 71 moter_r.pulsewidth(0.08);
Nike3221 0:649fc30be6ec 72
Nike3221 4:840a96a81c08 73 while(kei_gosa >=10 || ido_gosa >=10)//先ず経度or緯度をあわせる
Nike3221 4:840a96a81c08 74 { moter_l.pulsewidth(0.10);
Nike3221 4:840a96a81c08 75 moter_r.pulsewidth(0.08);
Nike3221 4:840a96a81c08 76 wait(5); //方向転換90° 要設定
Nike3221 4:840a96a81c08 77 moter_l.pulsewidth(0.08);
Nike3221 4:840a96a81c08 78 moter_r.pulsewidth(0.08);
Nike3221 4:840a96a81c08 79 wait(10); //gpsの変化待ち
Nike3221 1:a2629e589080 80
Nike3221 4:840a96a81c08 81 if(kei_gosa >=10 || ido_gosa >=10)
Nike3221 4:840a96a81c08 82 continue; // 方向転換をやりなおす
Nike3221 4:840a96a81c08 83 }
Nike3221 1:a2629e589080 84
Nike3221 4:840a96a81c08 85 while(kei_gosa >=10 || ido_gosa >=10)
Nike3221 4:840a96a81c08 86 { moter_l.pulsewidth(0.08);
Nike3221 4:840a96a81c08 87 moter_r.pulsewidth(0.08);
Nike3221 4:840a96a81c08 88 if(kei_gosa >=10 || ido_gosa >=10)
Nike3221 4:840a96a81c08 89 continue; // 進み続ける
Nike3221 4:840a96a81c08 90 }
Nike3221 4:840a96a81c08 91
Nike3221 4:840a96a81c08 92 }
Nike3221 1:a2629e589080 93 moter_l.pulsewidth(0.0);
Nike3221 1:a2629e589080 94 moter_r.pulsewidth(0.0);
Nike3221 0:649fc30be6ec 95
Nike3221 4:840a96a81c08 96
Nike3221 4:840a96a81c08 97 }
Nike3221 0:649fc30be6ec 98
Nike3221 0:649fc30be6ec 99 int main()
Nike3221 0:649fc30be6ec 100 {
Nike3221 1:a2629e589080 101 janpa1=1;
Nike3221 0:649fc30be6ec 102 gp.baud(9600);
Nike3221 1:a2629e589080 103 timer.attach(&gps_kakiko, 2.0);//割り込み
Nike3221 4:840a96a81c08 104 if(janpa2==0)//パラシュートが開き、ジャンパピンが抜けたらスタート
Nike3221 4:840a96a81c08 105 {
Nike3221 1:a2629e589080 106 wait(60);//落下中 要設定
Nike3221 0:649fc30be6ec 107 nikuromu();
Nike3221 0:649fc30be6ec 108 moter();
Nike3221 1:a2629e589080 109 }
Nike3221 0:649fc30be6ec 110 return 0;
Nike3221 0:649fc30be6ec 111 }