cansat

Dependencies:   SDFileSystem mbed

Committer:
Nike3221
Date:
Mon Feb 29 14:39:34 2016 +0000
Revision:
3:6ea7473e7072
Parent:
2:db3e3ca8d1eb
Child:
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 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 0:649fc30be6ec 45 void moter() {
Nike3221 1:a2629e589080 46
Nike3221 3:6ea7473e7072 47 while(ido_gosa >= 10 && ido_gosa >= 10)
Nike3221 0:649fc30be6ec 48 {
Nike3221 1:a2629e589080 49
Nike3221 1:a2629e589080 50 a=50;
Nike3221 1:a2629e589080 51 {gpsc[a]= gp.getc();
Nike3221 1:a2629e589080 52 pc.printf("%c",gpsc[a]);//確認用 要削除
Nike3221 1:a2629e589080 53
Nike3221 1:a2629e589080 54 if(gpsc[a-34]=='A')
Nike3221 1:a2629e589080 55 {if(gpsc[a-33]=='G')
Nike3221 1:a2629e589080 56 {if(gpsc[a-32]=='G')
Nike3221 1:a2629e589080 57 {
Nike3221 1:a2629e589080 58 old_ido=ido;
Nike3221 1:a2629e589080 59 old_kei=kei;
Nike3221 1:a2629e589080 60 ido=gpsc[a-16]*1000+gpsc[a-15]*100+gpsc[a-14]*10+gpsc[a-13];
Nike3221 1:a2629e589080 61 kei=gpsc[a-3]*1000+gpsc[a-2]*100+gpsc[a-1]*10+gpsc[a];
Nike3221 1:a2629e589080 62 pc.printf("***%d***%d***",ido,kei);// 要削除
Nike3221 1:a2629e589080 63
Nike3221 1:a2629e589080 64 if(a>=50)
Nike3221 1:a2629e589080 65 {a=25;}
Nike3221 1:a2629e589080 66 }}}
Nike3221 0:649fc30be6ec 67
Nike3221 1:a2629e589080 68 moter_l.period(0.02); // 周期
Nike3221 1:a2629e589080 69 moter_r.period(0.02);
Nike3221 1:a2629e589080 70 moter_l.pulsewidth(0.08); // servo position determined by a pulsewidth between 1-2ms
Nike3221 1:a2629e589080 71 moter_r.pulsewidth(0.08); //パルス幅
Nike3221 1:a2629e589080 72
Nike3221 3:6ea7473e7072 73 while(kei_gosa >=10 || ido_gosa >=10)//先ず経度or緯度をあわせる
Nike3221 1:a2629e589080 74 { moter_l.pulsewidth(0.10);
Nike3221 1:a2629e589080 75 moter_r.pulsewidth(0.08);
Nike3221 1:a2629e589080 76 wait(5); //方向転換90° 要設定
Nike3221 1:a2629e589080 77 moter_l.pulsewidth(0.08);
Nike3221 1:a2629e589080 78 moter_r.pulsewidth(0.08);
Nike3221 1:a2629e589080 79 wait(10); //gpsの変化待ち
Nike3221 1:a2629e589080 80
Nike3221 1:a2629e589080 81 if(kei_gosa >=10 || ido_gosa >=10)
Nike3221 1:a2629e589080 82 continue; // 方向転換をやりなおす
Nike3221 1:a2629e589080 83 }
Nike3221 1:a2629e589080 84
Nike3221 3:6ea7473e7072 85 while(kei_gosa >=10 || ido_gosa >=10)
Nike3221 1:a2629e589080 86 { moter_l.pulsewidth(0.08);
Nike3221 1:a2629e589080 87 moter_r.pulsewidth(0.08);
Nike3221 1:a2629e589080 88 if(kei_gosa >=10 || ido_gosa >=10)
Nike3221 1:a2629e589080 89 continue; // 進み続ける
Nike3221 1:a2629e589080 90 }
Nike3221 1:a2629e589080 91 moter_l.pulsewidth(0.0);
Nike3221 1:a2629e589080 92 moter_r.pulsewidth(0.0);
Nike3221 0:649fc30be6ec 93
Nike3221 0:649fc30be6ec 94 }
Nike3221 1:a2629e589080 95 }}
Nike3221 0:649fc30be6ec 96
Nike3221 0:649fc30be6ec 97 int main()
Nike3221 0:649fc30be6ec 98 {
Nike3221 1:a2629e589080 99 janpa1=1;
Nike3221 0:649fc30be6ec 100 gp.baud(9600);
Nike3221 1:a2629e589080 101 timer.attach(&gps_kakiko, 2.0);//割り込み
Nike3221 2:db3e3ca8d1eb 102 if(janpa2==0){//パラシュートが開き、ジャンパピンが抜けたらスタート
Nike3221 2:db3e3ca8d1eb 103
Nike3221 1:a2629e589080 104 wait(60);//落下中 要設定
Nike3221 0:649fc30be6ec 105 nikuromu();
Nike3221 0:649fc30be6ec 106 moter();
Nike3221 1:a2629e589080 107 }
Nike3221 0:649fc30be6ec 108 return 0;
Nike3221 0:649fc30be6ec 109 }