
test
Revision 5:b6daf80a7237, committed 2018-01-15
- Comitter:
- Morimoto448
- Date:
- Mon Jan 15 07:02:03 2018 +0000
- Parent:
- 4:04ca6a211b85
- Commit message:
- test
Changed in this revision
--- a/HCSR04.lib Tue Dec 12 00:34:36 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -http://mbed.org/users/prabhuvd/code/HCSR04/#71da0dbf4400
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TextLCD.lib Mon Jan 15 07:02:03 2018 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/simon/code/TextLCD/#308d188a2d3a
--- a/main.cpp Tue Dec 12 00:34:36 2017 +0000 +++ b/main.cpp Mon Jan 15 07:02:03 2018 +0000 @@ -1,6 +1,11 @@ #include "mbed.h" #include "hcsr04.h" + +AnalogIn photoref_L(A1); // フォトリフレクタ左 +AnalogIn photoref_M(A2); // フォトリフレクタ中央 +AnalogIn photoref_R(A3); // フォトリフレクタ右 + PwmOut mypwm4(D4); PwmOut mypwm6(D6); PwmOut mypwm2(D2); @@ -24,15 +29,16 @@ #define STATE_E (4) #define STATE_A2 (5) #define STATE_A3 (6) - +#define STATE_A4 (7) +#define STATE_D2 (8) -char mode,fase; +char mode,fase,linetrace; int wait_flag; -int timer; +double timer,measL,measM,measR; void tflg(){ - timer = t.read(); + timer = t.read(); //タイマー値読み込み } /*void flg(){ usensor.start(); @@ -53,102 +59,180 @@ mypwm2.period_ms(100); mypwm3.period_ms(100); -timerflag.attach(&tflg, 1.0); +timerflag.attach(&tflg, 0.1); /*flag.attach(&flg, 1.0);*/ while(1){ usensor1.start(); -usensor2.start(); - wait(0.2); +usensor2.start(); dist1=usensor1.get_dist_cm(); dist2=usensor2.get_dist_cm(); - /*printf("dist1: %ld\n",dist1); */ + measL = photoref_L.read(); + measM = photoref_M.read(); + measR = photoref_R.read(); + wait(0.1); + printf("dist1: %ld\n",dist1); printf("dist2: %ld\n",dist2); - + printf("fase: %ld\n",fase); + printf("timer: %lf\n",timer); - /* switch(timer) -{ - case 8.0: - wait_flag = 1; - mode = STATE_A; - break; - case 12.0: - wait_flag = 1; - mode = STATE_B; - break; - case 15.5: - wait_flag = 1; - mode = STATE_A2; - break; - case 22.0: - wait_flag = 1; - mode = STATE_D; - break; - case 30.0: - wait_flag = 1; - mode = STATE_A; - break; - case 37.0: - wait_flag = 1; - mode = STATE_C; - break; - case 42.0: - wait_flag = 1; - mode = STATE_A; - break; - -}*/ + + switch (fase) - { - case 0: - /*printf("timer: %d\n", timer);*/ - if(timer > 5){ - /*if(dist2 > 8){ - mode = STATE_A3; //hidariに - }else if(dist2 < 10){ - mode = STATE_A2; //migiに - }else{mode = STATE_A;} - }*/if(dist1 > 45 && dist1<250){ - fase = 1; + { case 0: + if(timer > 5.0){ + mode = STATE_A2; + if(dist1 > 45 && dist1 < 100){ + fase = 1; + t.stop(); + t.reset(); + } + } + break; + /* switch(linetrace){ + case 0: + if(timer > 5 && measL>0.2 && measM>0.2 && measR>0.2){ + mode = STATE_A4; + }if((timer > 5 && measL<0.2 && measM<0.2) || (timer > 5 && measM<0.2 && measR<0.2)){ + linetrace = 1; + t.stop(); + t.reset(); + } + break; + + case 1: + t.start(); + if(measL<0.2 && measM>0.2){ + mode = STATE_A3; + }else if(measM<0.2 && measL>0.2){ + mode = STATE_A2; + }else if(measL>0.2 && measM>0.2){ + if(dist2 < 10){ + mode = STATE_A2; + }else if(dist2 > 10){ + mode = STATE_A3; + } + }else if((timer > 1 && measL<0.2 && measM<0.2) || (timer > 1 && measM<0.2 && measR<0.2) ){ + linetrace = 2; + t.stop(); + t.reset(); + } + break; + + case 2: + t.start(); + mode = STATE_B; + if((timer > 2 && measL<0.2 && measM<0.2) || (timer > 1 && measM<0.2 && measR<0.2)){ + fase = 2; t.stop(); t.reset(); - t.start(); - } - break; + } //if閉じ + } //switch閉じ + break;*/ + case 1: - if(timer == 0){ - wait_flag = 1; - mode = STATE_B; - }else if(timer > 2 && dist1 > 60){ + if(timer == 0){ + wait_flag = 1; + mode = STATE_B; + t.start(); + }else if(timer > 2.0 && dist1 > 60 && dist1 < 250){ wait_flag = 1; mode = STATE_A; + t.stop(); t.reset(); - t.stop(); fase = 2; - t.start(); } break; case 2: - if(timer == 6.0){ + t.start(); + if(timer > 10.0 && timer < 11.0){ wait_flag = 1; mode = STATE_D; - }else if(timer == 16.0){ + fase = 3; + t.stop(); + t.reset(); + }/*else if (timer > 10.0 && timer < 11.0 && dist2 < 8 ){ + wait_flag = 1; + mode = STATE_D2; + fase = 3; + t.stop(); + t.reset(); + }*/ + break; + case 3: + t.start(); + /* if(timer > 15.0 && timer < 16.0 && dist2 > 8 && dist2 < 100){ + wait_flag = 1; + mode = STATE_A4; + fase = 4; + t.stop(); + t.reset(); + }else */ + if (timer > 15.0 && timer < 16.0){ + wait_flag = 1; + mode = STATE_A3; + fase = 4; + t.stop(); + t.reset(); + } + break; + + case 4: + /*if(measL <0.2 || measM <0.2 || measR <0.2){ + wait_flag = 1; + mode = STATE_C; + fase = 5; + }*/ + if(dist1 > 45 && dist1 < 100){ + fase = 5;} + + break; + case 5: + wait_flag = 1; + mode = STATE_C; + t.start(); + if(timer > 2.0 && dist1 > 60 && dist1 < 250){ + t.stop(); + t.reset(); + fase = 6; + } + break; + + case 6: + t.start(); + if(timer <2.0){ + wait_flag = 1; + mode = STATE_A; + }else{ + wait_flag = 1; + mode = STATE_A4;} + break; + + + + + + + + + + /* else if(timer > 20.0 && timer < 21.0){ wait_flag = 1; mode = STATE_A; - }else if(timer == 26.0){ + }else if(timer > 30.0 && timer < 31.0){ wait_flag = 1; mode = STATE_D; - }else if(timer == 36.0){ + }else if(timer > 40.0 && timer < 41.0){ wait_flag = 1; mode = STATE_A; - }else if(timer == 46.0){ + }else if(timer > 50.0 && timer < 51.0){ wait_flag = 1; mode = STATE_D;} + break; */ } - // 状態が切り替わるときは一時停止 if(wait_flag==1) { @@ -170,77 +254,96 @@ // STATE_A : 前進(左:正転 右:正転) case STATE_A: myled = 1; // LED点灯 - // 左モータの制御 - mypwm4.pulsewidth_ms(70); + // 右モータの制御 + mypwm4.pulsewidth_ms(40); mypwm6.pulsewidth_ms(0); - // 右モータの制御 - mypwm2.pulsewidth_ms(70); + // 左モータの制御 + mypwm2.pulsewidth_ms(38); mypwm3.pulsewidth_ms(0); break; // STATE_A2 : 右に曲がる(左:正転 右:正転) case STATE_A2: myled = 1; // LED点灯 - // 左モータの制御 - mypwm4.pulsewidth_ms(50); + // 右モータの制御 + mypwm4.pulsewidth_ms(55); mypwm6.pulsewidth_ms(0); - // 右モータの制御 - mypwm2.pulsewidth_ms(80); + // 左モータの制御 + mypwm2.pulsewidth_ms(38); mypwm3.pulsewidth_ms(0); break; // STATE_A3 : hidariに曲がる(左:正転 右:正転) case STATE_A3: myled = 1; // LED点灯 + // 右モータの制御 + mypwm4.pulsewidth_ms(40); + mypwm6.pulsewidth_ms(0); // 左モータの制御 - mypwm4.pulsewidth_ms(80); + mypwm2.pulsewidth_ms(55); + mypwm3.pulsewidth_ms(0); + break; + case STATE_A4: + myled = 1; // LED点灯 + // 右モータの制御 + mypwm4.pulsewidth_ms(50); mypwm6.pulsewidth_ms(0); + // 左モータの制御 + mypwm2.pulsewidth_ms(40); + mypwm3.pulsewidth_ms(0); + break; + // STATE_B : 左旋回(左:正転 右:逆転) + case STATE_B: + myled = 0; // LED点灯 // 右モータの制御 - mypwm2.pulsewidth_ms(10); - mypwm3.pulsewidth_ms(0); + mypwm4.pulsewidth_ms(30); + mypwm6.pulsewidth_ms(0); + // 左モータの制御 + mypwm2.pulsewidth_ms(0); + mypwm3.pulsewidth_ms(30); break; - // STATE_B : 右旋回(左:正転 右:逆転) - case STATE_B: - myled = 1; // LED点灯 - // 左モータの制御 - mypwm4.pulsewidth_ms(100); - mypwm6.pulsewidth_ms(0); + // STATE_C : 右旋回(左:逆転 右:正転) + case STATE_C: + myled = 0; // LED点灯 // 右モータの制御 - mypwm2.pulsewidth_ms(0); - mypwm3.pulsewidth_ms(100); - break; - - // STATE_C : 左旋回(左:逆転 右:正転) - case STATE_C: - myled = 1; // LED点灯 + mypwm4.pulsewidth_ms(0); + mypwm6.pulsewidth_ms(40); // 左モータの制御 - mypwm4.pulsewidth_ms(0); - mypwm6.pulsewidth_ms(100); - // 右モータの制御 - mypwm2.pulsewidth_ms(100); + mypwm2.pulsewidth_ms(40); mypwm3.pulsewidth_ms(0); break; // STATE_D : 後退(左:逆転 右:逆転) case STATE_D: myled = 1; // LED点灯 - // 左モータの制御 + // 右モータの制御 mypwm4.pulsewidth_ms(0); - mypwm6.pulsewidth_ms(80); - // 右モータの制御 + mypwm6.pulsewidth_ms(50); + // 左モータの制御 mypwm2.pulsewidth_ms(0); - mypwm3.pulsewidth_ms(83); + mypwm3.pulsewidth_ms(48); break; + // STATE_D : 後退(左:逆転 右:逆転) + case STATE_D2: + myled = 1; // LED点灯 + // 右モータの制御 + mypwm4.pulsewidth_ms(0); + mypwm6.pulsewidth_ms(47); + // 左モータの制御 + mypwm2.pulsewidth_ms(0); + mypwm3.pulsewidth_ms(48); + break; // STATE_E : ブレーキ(左:ブレーキ 右:ブレーキ) case STATE_E: myled = 0; // LED消灯 - // 左モータの制御 + // 右モータの制御 mypwm4.pulsewidth_ms(60); mypwm6.pulsewidth_ms(60); - // 右モータの制御 + // 左モータの制御 mypwm2.pulsewidth_ms(60); mypwm3.pulsewidth_ms(60); break; } } } +