送信のところを変えました。

Dependencies:   mbed

Committer:
YUPPY
Date:
Sat Dec 14 15:16:36 2019 +0000
Revision:
16:429f6ad98e90
Parent:
15:1deffcfa5b1a
Child:
17:2e0a775081ce
g;

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