- 追加された行はこの色です。
- 削除された行はこの色です。
[[2009a/A8/課題2右]]
*交差点を曲がるプログラム [#na97d699]
-担当 西口
#define THRESHOLD 44 //黒と白の境目の光量
int a;
#define L 44
#define turn_right OnFwd(OUT_A+OUT_C);Wait(40);OnFwd(OUT_A);OnRev(OUT_C); //右に曲がるプログラム
Wait(85);OnFwd(OUT_A+OUT_C);Wait(30);
#define turn_left OnFwd(OUT_A+OUT_C);Wait(40);OnFwd(OUT_C);OnRev(OUT_A); //左に曲がるプログラム
Wait(90);OnFwd(OUT_A+OUT_C);Wait(30);
#define line_trace if (SENSOR_1>L){ //ラインをトレースする
if(SENSOR_3>L){OnFwd(OUT_A+OUT_C);}
else{OnFwd(OUT_A);OnRev(OUT_C);}
}
else{
if(SENSOR_3>L){OnRev(OUT_A);OnFwd(OUT_C);}
}
int a; //変数aを定義
task main ()
{
a=0; //aで曲がった回数をカウント
a=0;
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_TOUCH);
SetSensor(SENSOR_3,SENSOR_LIGHT);
while (a<19){ //一周するのに6回曲がるので6×3=18回試行するようにした。
SetSensor(SENSOR_3,SENSOR_LIGHT);
if((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD))//光センサーが両方黒のとき
{
if((a==0)||(a==2)||(a==4)||(a==6)||(a==8)|| //偶数回曲がっているとき
(a==10)||(a==12)||(a==14)||(a==16)||(a==18))
{
Off(OUT_A+OUT_C); //左に曲がる
Wait(100);
OnFwd(OUT_A+OUT_C);
Wait(40);
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(85);
OnFwd(OUT_A+OUT_C);
Wait(30);
while (a<19) {
if((SENSOR_1<L)&&(SENSOR_3<L)){ //光センサーがどちらも黒
if((a==0)||(a==2)||(a==4)||(a==6)||(a==8)||(a==10)||(a==12)||(a==14)||(a==16)||(a==18)) //偶数回のとき
{turn_right;}
else //奇数回のとき
{turn_left;}
a=a+1;
}
else{ //奇数回曲がっているときに
Off(OUT_A+OUT_C); //右に曲がる
Wait(100);
OnFwd(OUT_A+OUT_C);
Wait(40);
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(90);
OnFwd(OUT_A+OUT_C);
Wait(30);
}a=a+1; //曲がった回数を一回カウント
line_trace
}
if (SENSOR_1>THRESHOLD){ //光センサー1が白
if(SENSOR_3>THRESHOLD){ //光センサー3も白
OnFwd(OUT_A+OUT_C);
Off(OUT_A+OUT_C);
}
else{ //光センサー3は黒
OnFwd(OUT_A);
OnRev(OUT_C);
}
}
else{ //光センサー1が黒
if(SENSOR_3>THRESHOLD){ //光センサー3は白
OnRev(OUT_A);
OnFwd(OUT_C);
}
}
Off(OUT_A+OUT_C); //三周終えて止まる
}
}