cansat_B 2019 / Mbed 2 deprecated CanSatB2019_main_1213

Dependencies:   mbed

Committer:
YUPPY
Date:
Thu Dec 12 07:28:39 2019 +0000
Revision:
11:8061348a85eb
Parent:
10:b190babac114
Child:
12:e9d22bda3be6
yeah

Who changed what in which revision?

UserRevisionLine numberNew contents of line
YUPPY 0:6212b283430c 1 #define cansatB
YUPPY 7:fae874e898b3 2 #include "mbed.h"
YUPPY 7:fae874e898b3 3 //mbed
YUPPY 7:fae874e898b3 4 #include "getGPS.h"
YUPPY 7:fae874e898b3 5 #include "math.h"
YUPPY 7:fae874e898b3 6 //GPS
YUPPY 7:fae874e898b3 7 #include "TB6612.h"
YUPPY 7:fae874e898b3 8 //motorDriver
YUPPY 7:fae874e898b3 9 #include "JPEGCamera.h"
YUPPY 7:fae874e898b3 10 //カメラ
YUPPY 0:6212b283430c 11 #include <stdio.h>
YUPPY 7:fae874e898b3 12 #include <base64.h>
YUPPY 7:fae874e898b3 13 //XBee
YUPPY 7:fae874e898b3 14 #include "us015.h"
YUPPY 7:fae874e898b3 15 // 超音波センサ
YUPPY 7:fae874e898b3 16
YUPPY 7:fae874e898b3 17
YUPPY 2:e2b803e3bcbc 18 GPS gps (p28,p27); //GPS
YUPPY 4:1354e56c7dd3 19
YUPPY 2:e2b803e3bcbc 20 DigitalOut FET(p21); //FET
YUPPY 7:fae874e898b3 21 DigitalOut myled(LED1);
YUPPY 7:fae874e898b3 22 US015 hs(p12,p11);
YUPPY 7:fae874e898b3 23 DigitalIn thermo(p20);
YUPPY 7:fae874e898b3 24 DigitalOut Sb612switch(p15); //焦電スイッチ
YUPPY 4:1354e56c7dd3 25 DigitalOut Ultra(p12);
YUPPY 7:fae874e898b3 26 Serial pc(USBTX,USBRX); // tx, rx
YUPPY 7:fae874e898b3 27 JPEGCamera camera(p9, p10); // TX, RX
YUPPY 7:fae874e898b3 28 TB6612 left1(p25,p17,p16); //モーターピン
YUPPY 7:fae874e898b3 29 TB6612 right1(p26,p19,p18); //モーターピン
YUPPY 7:fae874e898b3 30 Serial xbee(p13,p14); //xbee
YUPPY 11:8061348a85eb 31 DigitalIn flight(p23); //フライトピン
YUPPY 7:fae874e898b3 32
YUPPY 7:fae874e898b3 33
YUPPY 5:5aa7223226df 34
YUPPY 7:fae874e898b3 35 int main()
YUPPY 7:fae874e898b3 36 {
YUPPY 7:fae874e898b3 37
YUPPY 7:fae874e898b3 38
YUPPY 7:fae874e898b3 39 Sb612switch=0; //焦電off
YUPPY 7:fae874e898b3 40 wait(1);
YUPPY 7:fae874e898b3 41 Ultra=0;//超音波off
YUPPY 11:8061348a85eb 42 FET=1;//FET off
YUPPY 5:5aa7223226df 43 printf("CanSat-B_Start!\r\n");
YUPPY 11:8061348a85eb 44 flight==1;//flight pin ついてる
YUPPY 7:fae874e898b3 45 //FET
YUPPY 11:8061348a85eb 46 while(1){
YUPPY 11:8061348a85eb 47 if(flight==1) {
YUPPY 11:8061348a85eb 48 wait(10);
YUPPY 11:8061348a85eb 49 printf("mada\r\n");
YUPPY 11:8061348a85eb 50 }
YUPPY 11:8061348a85eb 51 else{
YUPPY 11:8061348a85eb 52 if(flight==1) {
YUPPY 11:8061348a85eb 53 wait(10);
YUPPY 11:8061348a85eb 54 printf("madamada\r\n");
YUPPY 11:8061348a85eb 55 }
YUPPY 11:8061348a85eb 56 else{
YUPPY 11:8061348a85eb 57 printf("yattar\r\n");
YUPPY 11:8061348a85eb 58 FET=0;
YUPPY 11:8061348a85eb 59 wait(10);
YUPPY 11:8061348a85eb 60 FET=1;
YUPPY 11:8061348a85eb 61 wait(10);
YUPPY 11:8061348a85eb 62 printf("FET End!\r\n");
YUPPY 11:8061348a85eb 63
YUPPY 11:8061348a85eb 64 break;
YUPPY 11:8061348a85eb 65 }
YUPPY 11:8061348a85eb 66 }
YUPPY 11:8061348a85eb 67 }
YUPPY 7:fae874e898b3 68
YUPPY 7:fae874e898b3 69
YUPPY 5:5aa7223226df 70 //以下GPS
YUPPY 2:e2b803e3bcbc 71 double a;
YUPPY 2:e2b803e3bcbc 72 double b;
YUPPY 2:e2b803e3bcbc 73 double distance;
KINU 9:ec770f68440e 74 int k = 0;
KINU 9:ec770f68440e 75 int j = 0;
KINU 9:ec770f68440e 76
KINU 10:b190babac114 77 pc.printf("GPS Start\n");
KINU 10:b190babac114 78 xbee.printf("s\n");
YUPPY 11:8061348a85eb 79 while(1){
KINU 10:b190babac114 80 if(gps.getgps()){
KINU 9:ec770f68440e 81
KINU 9:ec770f68440e 82 pc.printf("(%lf,%lf)\r\n",gps.latitude,gps.longitude);//緯度と経度を表示
KINU 10:b190babac114 83 k ++;
KINU 9:ec770f68440e 84 if(k<59){
KINU 9:ec770f68440e 85 }else{
YUPPY 2:e2b803e3bcbc 86 a = gps.latitude;
YUPPY 2:e2b803e3bcbc 87 b = gps.longitude;
KINU 9:ec770f68440e 88 printf("(a =%lf,b =%lf)\r\n",gps.latitude,gps.longitude);//a,bを表示
YUPPY 2:e2b803e3bcbc 89 break;
KINU 9:ec770f68440e 90 }
YUPPY 2:e2b803e3bcbc 91 }else{
KINU 9:ec770f68440e 92 pc.printf("NO DATA\r\n");//データ取得失敗
KINU 9:ec770f68440e 93 wait(1);
KINU 9:ec770f68440e 94 }
KINU 9:ec770f68440e 95 }
KINU 9:ec770f68440e 96 printf("moter on");
KINU 10:b190babac114 97 left1 = 100; //左モーター100%
KINU 10:b190babac114 98 right1 = 100;//右モーター100%
KINU 9:ec770f68440e 99
KINU 9:ec770f68440e 100 wait(30);
KINU 9:ec770f68440e 101 printf("moter off");
KINU 10:b190babac114 102 left1 = 0; //左モーター0%
KINU 10:b190babac114 103 right1 = 0;//右モーター0%
KINU 9:ec770f68440e 104 printf("moter off");
KINU 9:ec770f68440e 105 wait(15);
KINU 9:ec770f68440e 106 printf("GPS restart\n");
KINU 9:ec770f68440e 107
KINU 9:ec770f68440e 108 while(1) {
KINU 9:ec770f68440e 109 if(gps.getgps()){
YUPPY 2:e2b803e3bcbc 110
KINU 9:ec770f68440e 111 pc.printf("(%lf,%lf)\r\n",gps.latitude,gps.longitude);//緯度と経度を表示
KINU 9:ec770f68440e 112 j ++;
KINU 9:ec770f68440e 113 if(j<29){
KINU 9:ec770f68440e 114 }else{
KINU 9:ec770f68440e 115 // 球面三角法により、大円距離(メートル)を求める
KINU 9:ec770f68440e 116 double c;
KINU 9:ec770f68440e 117 double d;
KINU 9:ec770f68440e 118 c = gps.latitude;
KINU 9:ec770f68440e 119 d = gps.longitude;
YUPPY 2:e2b803e3bcbc 120
KINU 9:ec770f68440e 121 pc.printf("(%lf,%lf)\n\r",gps.latitude,gps.longitude);//c,dを表示
KINU 9:ec770f68440e 122 const double pi = 3.14159265359; // 円周率
YUPPY 2:e2b803e3bcbc 123
KINU 9:ec770f68440e 124 double ra = a * pi / 180;
KINU 9:ec770f68440e 125 double rb = b * pi / 180; // 緯度経度をラジアンに変換
KINU 9:ec770f68440e 126 double rc = c * pi / 180;
KINU 9:ec770f68440e 127 double rd = d * pi / 180;
YUPPY 2:e2b803e3bcbc 128
KINU 9:ec770f68440e 129 double e = sin(ra) * sin(rc) + cos(ra) * cos(rc) * cos(rb - rd); // 2点の中心角(ラジアン)を求める
KINU 9:ec770f68440e 130 double rr = acos(e);
YUPPY 2:e2b803e3bcbc 131
KINU 9:ec770f68440e 132 const double earth_radius = 6378140; // 地球赤道半径(m)
YUPPY 2:e2b803e3bcbc 133
KINU 9:ec770f68440e 134 distance = earth_radius * rr; // 2点間の距離(m)
YUPPY 2:e2b803e3bcbc 135
KINU 9:ec770f68440e 136 if (distance<5){
YUPPY 2:e2b803e3bcbc 137 }else{
KINU 9:ec770f68440e 138 pc.printf("(c =%lf,d =%lf)\n\r",gps.latitude,gps.longitude);//c,dを表示
YUPPY 2:e2b803e3bcbc 139 pc.printf("5m clear!");
KINU 9:ec770f68440e 140 xbee.printf("5m clear!");
KINU 9:ec770f68440e 141 break;
KINU 9:ec770f68440e 142 }
KINU 9:ec770f68440e 143 }
KINU 9:ec770f68440e 144 }else{
KINU 9:ec770f68440e 145 printf("No data");
KINU 10:b190babac114 146 }
KINU 10:b190babac114 147 } //GPS End
YUPPY 5:5aa7223226df 148
YUPPY 7:fae874e898b3 149 int i=1;
YUPPY 4:1354e56c7dd3 150 float th;
YUPPY 4:1354e56c7dd3 151 Timer tm;
YUPPY 7:fae874e898b3 152 for(i=0;i<3;i++){
YUPPY 4:1354e56c7dd3 153 pc.printf("start\r\n");
YUPPY 6:db1a62608047 154
YUPPY 7:fae874e898b3 155 left1 = 100; //左モーター100%
YUPPY 7:fae874e898b3 156 right1 = 100;//右モーター100%
YUPPY 7:fae874e898b3 157 printf("Restart\r\n" );
YUPPY 7:fae874e898b3 158 wait(4);
YUPPY 7:fae874e898b3 159 left1=50;
YUPPY 7:fae874e898b3 160 right1=50;
YUPPY 7:fae874e898b3 161 wait(1);
YUPPY 7:fae874e898b3 162 left1=0;
YUPPY 7:fae874e898b3 163 right1=0;
YUPPY 7:fae874e898b3 164 wait(1);
YUPPY 7:fae874e898b3 165 printf("停止\n\r");
YUPPY 7:fae874e898b3 166 Sb612switch=0; //焦電off
YUPPY 7:fae874e898b3 167 wait(1);
YUPPY 4:1354e56c7dd3 168 Ultra=1;//超音波on
YUPPY 7:fae874e898b3 169 wait(1);
YUPPY 5:5aa7223226df 170
YUPPY 7:fae874e898b3 171 while(1) {
YUPPY 7:fae874e898b3 172 printf("超音波on\r\n 焦電off\r\n" ) ;
YUPPY 7:fae874e898b3 173 hs.TrigerOut();
YUPPY 5:5aa7223226df 174 wait(1);
YUPPY 5:5aa7223226df 175 int distance;
YUPPY 5:5aa7223226df 176 distance = hs.GetDistance();
YUPPY 7:fae874e898b3 177 printf("distance=%dmm\r\n",distance);//距離出力
YUPPY 7:fae874e898b3 178
YUPPY 7:fae874e898b3 179 if(distance<=2000){//超音波反応
YUPPY 7:fae874e898b3 180
YUPPY 7:fae874e898b3 181 Ultra=0;//超音波off
YUPPY 7:fae874e898b3 182 wait(1);
YUPPY 7:fae874e898b3 183 Sb612switch=1; //焦電on
YUPPY 7:fae874e898b3 184 wait(1);
YUPPY 7:fae874e898b3 185 printf("焦電On!\r\n ");
YUPPY 7:fae874e898b3 186 bool detected=false;
YUPPY 7:fae874e898b3 187 th = thermo;
YUPPY 7:fae874e898b3 188 if(th==1 && !detected) {//焦電反応ありの場合
YUPPY 7:fae874e898b3 189 i++;
YUPPY 7:fae874e898b3 190 detected=true;
YUPPY 7:fae874e898b3 191 pc.printf("human\r\n");
YUPPY 7:fae874e898b3 192 tm.reset();
YUPPY 7:fae874e898b3 193 tm.start();
YUPPY 7:fae874e898b3 194
YUPPY 7:fae874e898b3 195 LocalFileSystem local("local");
YUPPY 7:fae874e898b3 196 Timer timer;
YUPPY 7:fae874e898b3 197 timer.start();
YUPPY 7:fae874e898b3 198 camera.setPictureSize(JPEGCamera::SIZE320x240);
YUPPY 7:fae874e898b3 199
YUPPY 7:fae874e898b3 200 FILE *fp;
YUPPY 7:fae874e898b3 201 base64 *bs;
YUPPY 7:fae874e898b3 202 int c;
YUPPY 7:fae874e898b3 203
YUPPY 7:fae874e898b3 204 for (int r = 0; r < 1; r++) {
YUPPY 7:fae874e898b3 205 if (camera.isReady()) {
YUPPY 7:fae874e898b3 206 char filename[32];
YUPPY 7:fae874e898b3 207 sprintf(filename, "/local/pict%03d.jpg",r);
YUPPY 7:fae874e898b3 208 printf("Picture: %s ", filename);
YUPPY 7:fae874e898b3 209 if (camera.takePicture(filename)) {
YUPPY 7:fae874e898b3 210 while (camera.isProcessing()) {
YUPPY 7:fae874e898b3 211 camera.processPicture();
YUPPY 7:fae874e898b3 212 printf("take pictuer!");
YUPPY 7:fae874e898b3 213 }
YUPPY 7:fae874e898b3 214 }else{
YUPPY 7:fae874e898b3 215 printf("take picture failed\r\n");
YUPPY 7:fae874e898b3 216 }
YUPPY 7:fae874e898b3 217 }else{
YUPPY 7:fae874e898b3 218 printf("camera is not ready\r\n");
YUPPY 7:fae874e898b3 219 }
YUPPY 7:fae874e898b3 220
YUPPY 7:fae874e898b3 221 printf("time = %f\n", timer.read());
YUPPY 7:fae874e898b3 222
YUPPY 7:fae874e898b3 223
YUPPY 7:fae874e898b3 224
YUPPY 7:fae874e898b3 225 xbee.printf("xbee connected!\r\n");
YUPPY 7:fae874e898b3 226 bs = new base64();
YUPPY 7:fae874e898b3 227 bs->Encode("/local/pict000.jpg","/local/data000.txt");
YUPPY 7:fae874e898b3 228
YUPPY 7:fae874e898b3 229 if((fp=fopen("/local/data000.txt","r"))!=NULL)
YUPPY 7:fae874e898b3 230 {
YUPPY 7:fae874e898b3 231 pc.printf("ok\r\n");
YUPPY 7:fae874e898b3 232 while((c=fgetc(fp))!=EOF){
YUPPY 7:fae874e898b3 233 xbee.printf("%c",c);
YUPPY 7:fae874e898b3 234 }
YUPPY 7:fae874e898b3 235 fclose(fp);
YUPPY 7:fae874e898b3 236 }
YUPPY 7:fae874e898b3 237 }
YUPPY 7:fae874e898b3 238 while(1){
YUPPY 7:fae874e898b3 239
YUPPY 7:fae874e898b3 240 int received_data = xbee.getc();
YUPPY 7:fae874e898b3 241
YUPPY 7:fae874e898b3 242 if (received_data == 82 || received_data == 114){ //Rまたはr
YUPPY 7:fae874e898b3 243 xbee.printf("_________________________________________________________________________________________________________________________________\r\n");
YUPPY 7:fae874e898b3 244 if((fp=fopen("/local/data000.txt","r"))!=NULL)
YUPPY 7:fae874e898b3 245 {
YUPPY 7:fae874e898b3 246 while ((c=fgetc(fp))!=EOF){
YUPPY 7:fae874e898b3 247 xbee.printf("%c",c); //再送
YUPPY 7:fae874e898b3 248 }
YUPPY 7:fae874e898b3 249 fclose(fp);
YUPPY 7:fae874e898b3 250 }
YUPPY 7:fae874e898b3 251 }
YUPPY 7:fae874e898b3 252 else{
YUPPY 7:fae874e898b3 253 break;
YUPPY 7:fae874e898b3 254 }
YUPPY 7:fae874e898b3 255 }
YUPPY 7:fae874e898b3 256
YUPPY 7:fae874e898b3 257 Sb612switch=0; //焦電off
YUPPY 7:fae874e898b3 258 wait(1);
YUPPY 7:fae874e898b3 259 }else{//焦電反応なしの場合
YUPPY 7:fae874e898b3 260 printf("not found!\r\n");
YUPPY 7:fae874e898b3 261
YUPPY 7:fae874e898b3 262
YUPPY 7:fae874e898b3 263 Sb612switch=0;
YUPPY 7:fae874e898b3 264 wait(1);
YUPPY 7:fae874e898b3 265 Ultra=0;
YUPPY 7:fae874e898b3 266 wait(1);
YUPPY 7:fae874e898b3 267 detected=false;
YUPPY 7:fae874e898b3 268 printf("後退\r\n");
YUPPY 7:fae874e898b3 269 left1 = -100; //左モーター-50%
YUPPY 7:fae874e898b3 270 right1 = -100;//右モーター-50%
YUPPY 7:fae874e898b3 271 wait(2.0);
YUPPY 7:fae874e898b3 272 left1=-50;
YUPPY 7:fae874e898b3 273 right1=-50;
YUPPY 7:fae874e898b3 274 wait(1);
YUPPY 7:fae874e898b3 275 left1=0;
YUPPY 7:fae874e898b3 276 right1=0;
YUPPY 7:fae874e898b3 277 wait(1);
YUPPY 7:fae874e898b3 278
YUPPY 7:fae874e898b3 279 printf("右折\n\r");
YUPPY 7:fae874e898b3 280
YUPPY 7:fae874e898b3 281 left1 = 60; //左モーター100%
YUPPY 7:fae874e898b3 282 right1 = 100;//右モーター100%
YUPPY 7:fae874e898b3 283 wait(2.0);
YUPPY 7:fae874e898b3 284 }
YUPPY 7:fae874e898b3 285 }else{//超音波distance>2000
YUPPY 7:fae874e898b3 286 printf("safety zone\r\n");
YUPPY 7:fae874e898b3 287 Ultra=0;
YUPPY 7:fae874e898b3 288 wait(1);
YUPPY 7:fae874e898b3 289 left1 = 60; //左モーター50%
YUPPY 7:fae874e898b3 290 right1 = 100;//右モーター50%
YUPPY 7:fae874e898b3 291 printf("右折\r\n");
YUPPY 5:5aa7223226df 292 }
YUPPY 4:1354e56c7dd3 293
YUPPY 5:5aa7223226df 294 }
YUPPY 7:fae874e898b3 295
YUPPY 7:fae874e898b3 296 }
YUPPY 7:fae874e898b3 297 }