Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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;
}
}
}
+