cansat
Dependencies: SDFileSystem mbed
main.cpp@5:85c3dff1be3f, 2016-03-02 (annotated)
- Committer:
- Nike3221
- Date:
- Wed Mar 02 10:19:53 2016 +0000
- Revision:
- 5:85c3dff1be3f
- Parent:
- 4:840a96a81c08
cansat
Who changed what in which revision?
User | Revision | Line number | New 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 | } |