CanSat-C 2021 / Mbed 2 deprecated cansatC_test2_xbee2

Dependencies:   ATP3012 mbed a HMC US015_2 getGPS

Committer:
miyajitakenari
Date:
Wed Nov 10 08:36:55 2021 +0000
Revision:
3:ec2b7587be78
Parent:
2:9bbc22250488
Child:
4:975b0d9bd51b
a

Who changed what in which revision?

UserRevisionLine numberNew contents of line
miyajitakenari 2:9bbc22250488 1 /*ライブラリ*/
miyajitakenari 0:79033ee3c961 2 #include "mbed.h"
miyajitakenari 0:79033ee3c961 3
miyajitakenari 0:79033ee3c961 4 // 自作関数
miyajitakenari 0:79033ee3c961 5 #include "Function.h"
miyajitakenari 0:79033ee3c961 6
miyajitakenari 0:79033ee3c961 7 // フライトピン・ニクロム線関係
miyajitakenari 0:79033ee3c961 8 DigitalIn flight_pin(A0);
miyajitakenari 0:79033ee3c961 9 DigitalOut nichrome(D13);
miyajitakenari 0:79033ee3c961 10 //
miyajitakenari 0:79033ee3c961 11 #define cp_max 3 //CPの数を入力する
miyajitakenari 0:79033ee3c961 12
miyajitakenari 0:79033ee3c961 13 int main() {
miyajitakenari 0:79033ee3c961 14 // 変数宣言
miyajitakenari 0:79033ee3c961 15 double GPS_x, GPS_y; // 現在地の座標
miyajitakenari 0:79033ee3c961 16 double direction; // 次CPへの向き
miyajitakenari 0:79033ee3c961 17 double CPs_x[3]={34.54608391847546, 34.545845666047306, 34.545666059919796}; //CPリスト(x座標)
miyajitakenari 0:79033ee3c961 18 double CPs_y[3]={135.50338843400897, 135.50368659080985, 135.50347298593758}; // CPリスト(y座標)
miyajitakenari 0:79033ee3c961 19 double next_CP_x, next_CP_y;
miyajitakenari 0:79033ee3c961 20
miyajitakenari 0:79033ee3c961 21 // 落下検知
miyajitakenari 0:79033ee3c961 22 // パラシュート分離
miyajitakenari 0:79033ee3c961 23
miyajitakenari 0:79033ee3c961 24 wait(3);//電源ついてから3v3が安定するまで、秒数は適当、必要かもわからん
miyajitakenari 3:ec2b7587be78 25 while(flight_pin){}
miyajitakenari 0:79033ee3c961 26 pc.printf("flight_pin nuketa");
miyajitakenari 0:79033ee3c961 27 xbee.printf("flight_pin nuketa");
miyajitakenari 0:79033ee3c961 28 wait(35);//ピン抜けてから地面につくまで70m/2.8(m/s)=25(s)余裕を見て+10s
miyajitakenari 0:79033ee3c961 29 nichrome=1;
miyajitakenari 0:79033ee3c961 30 pc.printf("nichrome in");
miyajitakenari 0:79033ee3c961 31 xbee.printf("nichrome in");
miyajitakenari 0:79033ee3c961 32 wait(30);
miyajitakenari 0:79033ee3c961 33 nichrome=0;
miyajitakenari 0:79033ee3c961 34 // 落下終了
miyajitakenari 0:79033ee3c961 35
miyajitakenari 0:79033ee3c961 36
miyajitakenari 0:79033ee3c961 37 // 行動フロー開始
miyajitakenari 0:79033ee3c961 38 Calibration();
miyajitakenari 0:79033ee3c961 39 xbee.printf("XBee Connected\r\n");
miyajitakenari 0:79033ee3c961 40 pc.printf("xbee_Connected\r\n");
miyajitakenari 0:79033ee3c961 41 pc.printf("Fall point(lati,long)=(%lf , %lf)\r\n", gps.latitude, gps.longitude);
miyajitakenari 0:79033ee3c961 42 xbee.printf("Fall point(lati,long)=(%lf , %lf)\r\n", gps.latitude, gps.longitude);
miyajitakenari 0:79033ee3c961 43 for (int i = 0; i<=cp_max-1 ; i++) {//最後のcp=goalまで移動
miyajitakenari 0:79033ee3c961 44 next_CP_x = CPs_x[i];
miyajitakenari 0:79033ee3c961 45 next_CP_y = CPs_y[i];
miyajitakenari 0:79033ee3c961 46
miyajitakenari 0:79033ee3c961 47 pc.printf("next_i=%d\r\n", i);
miyajitakenari 0:79033ee3c961 48 xbee.printf("next_i=%d\r\n", i);
miyajitakenari 0:79033ee3c961 49
miyajitakenari 0:79033ee3c961 50 while (1) {
miyajitakenari 0:79033ee3c961 51 speak();
miyajitakenari 0:79033ee3c961 52 direction = AngleGet();
miyajitakenari 0:79033ee3c961 53 pc.printf("direction=%f\n", direction);
miyajitakenari 0:79033ee3c961 54 xbee.printf("direction=%f\n", direction);
miyajitakenari 0:79033ee3c961 55 //角度調節
miyajitakenari 0:79033ee3c961 56 while(1) {
miyajitakenari 0:79033ee3c961 57 if(direction < 5 || direction > 355) { //角度判定
miyajitakenari 0:79033ee3c961 58 break;
miyajitakenari 0:79033ee3c961 59 }
miyajitakenari 0:79033ee3c961 60 else {
miyajitakenari 0:79033ee3c961 61 Move('1', 0);//停止
miyajitakenari 3:ec2b7587be78 62 pc.printf("mortor mode:1 speed:0");
miyajitakenari 3:ec2b7587be78 63 xbee.printf("mortor mode:1 speed:0");
miyajitakenari 0:79033ee3c961 64 Move('4', 0.5);//時計回りに回転
miyajitakenari 3:ec2b7587be78 65 pc.printf("mortor mode:4 speed:0.5");
miyajitakenari 3:ec2b7587be78 66 pc.printf("mortor mode:4 speed:0.5");
miyajitakenari 0:79033ee3c961 67 }
miyajitakenari 0:79033ee3c961 68 }
miyajitakenari 0:79033ee3c961 69
miyajitakenari 0:79033ee3c961 70 while(FrontGet()) {
miyajitakenari 0:79033ee3c961 71 Move('1', 0); //停止
miyajitakenari 3:ec2b7587be78 72 pc.printf("mortor mode:1 speed:0");
miyajitakenari 3:ec2b7587be78 73 xbee.printf("mortor mode:1 speed:0");
miyajitakenari 0:79033ee3c961 74 Move('4', 0.5); //時計回り回転
miyajitakenari 3:ec2b7587be78 75 pc.printf("mortor mode:4 speed:0.5");
miyajitakenari 3:ec2b7587be78 76 xbee.printf("mortor mode:4 speed:0.5");
miyajitakenari 0:79033ee3c961 77 wait(1);
miyajitakenari 0:79033ee3c961 78 Move('1', 0); //回転停止
miyajitakenari 3:ec2b7587be78 79 pc.printf("mortor mode:1 speed:0");
miyajitakenari 3:ec2b7587be78 80 xbee.printf("mortor mode:1 speed:0");
miyajitakenari 0:79033ee3c961 81 }
miyajitakenari 0:79033ee3c961 82 pc.printf("\n\rflag=xbee ni Input");
miyajitakenari 0:79033ee3c961 83 xbee.printf("\n\rspeed flag=");
miyajitakenari 0:79033ee3c961 84 wait(3);
miyajitakenari 0:79033ee3c961 85 float as;//advance speed
miyajitakenari 0:79033ee3c961 86 if(xbee.readable()){
miyajitakenari 0:79033ee3c961 87 pc.printf("advance speed=xbee Input");
miyajitakenari 0:79033ee3c961 88 xbee.printf("advance speed=");
miyajitakenari 0:79033ee3c961 89 xbee.scanf("%f",&as);
miyajitakenari 0:79033ee3c961 90 }else{
miyajitakenari 0:79033ee3c961 91 as=0.5;
miyajitakenari 0:79033ee3c961 92 }
miyajitakenari 0:79033ee3c961 93 Move('2', as);
miyajitakenari 3:ec2b7587be78 94 pc.printf("mortor mode:2 speed:%f",as);
miyajitakenari 3:ec2b7587be78 95 xbee.printf("mortor mode:2 speed:%f",as);
miyajitakenari 0:79033ee3c961 96 catchGPS();
miyajitakenari 0:79033ee3c961 97 pc.printf("%lf %lf\r\n", gps.latitude, gps.longitude);
miyajitakenari 0:79033ee3c961 98 xbee.printf("now point(lati, long)=%lf , %lf\r\n", gps.latitude, gps.longitude);
miyajitakenari 0:79033ee3c961 99
miyajitakenari 0:79033ee3c961 100 double lati = 111132.8715; //1度あたりの緯度の距離(m)
miyajitakenari 0:79033ee3c961 101 double longi = 91535.79099; //1度あたりの経度の距離(m)
miyajitakenari 0:79033ee3c961 102 if ((next_CP_x - GPS_x)*(next_CP_x - GPS_x)*lati*lati + (next_CP_y = GPS_y)*(next_CP_y = GPS_y)*longi*longi < 25) { // CP到着判定 //試験で調整
miyajitakenari 0:79033ee3c961 103 pc.printf("now leach cp[%d]=x_%f,y_%f",i,next_CP_x ,next_CP_y);
miyajitakenari 0:79033ee3c961 104 xbee.printf("now leach cp[%d]=x_%f,y_%f",i,next_CP_x ,next_CP_y);
miyajitakenari 0:79033ee3c961 105 break;
miyajitakenari 0:79033ee3c961 106 }
miyajitakenari 0:79033ee3c961 107
miyajitakenari 0:79033ee3c961 108 }//while(1){}
miyajitakenari 0:79033ee3c961 109 }//for(){}
miyajitakenari 0:79033ee3c961 110 // 行動フロー終了
miyajitakenari 0:79033ee3c961 111 pc.printf("End\r\n");
miyajitakenari 0:79033ee3c961 112 xbee.printf("End\r\n");
miyajitakenari 0:79033ee3c961 113 Move('1', 0); //停止
miyajitakenari 3:ec2b7587be78 114 pc.printf("mortor mode:1 speed:0");
miyajitakenari 3:ec2b7587be78 115 xbee.printf("mortor mode:1 speed:0");
miyajitakenari 0:79033ee3c961 116 return 0;
miyajitakenari 0:79033ee3c961 117 }