プログラム†
#define MOVE_TIME1 700000
#define MOVE_TIME2 40000
#define nMAX1 3000
#define nMAX2 350
#define THRESHOLD 55
#define SPEED_H 30
#define SPEED_L 25
#define OnRL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(OUT_C,speedL);
#define go_forward OnRL(SPEED_H,SPEED_H);//直進
#define turn_left1 OnRL(SPEED_L,-SPEED_L);//左旋回
#define turn_left2 OnRL(SPEED_L,0);//左回転
#define turn_right1 OnRL(-SPEED_L,SPEED_L);//右旋回
#define turn_right2 OnRL(0,SPEED_L);//右回転
#define STEP 1
#define short_break Off(OUT_BC);Wait(100);
#define CROSS_TIME 210
#define cross_line OnRL(SPEED_L,SPEED_L);Wait(CROSS_TIME);short_break;//交差点通過
task main()
{
SetSensorLight(S1);
long t0=CurrentTick();
while(CurrentTick()-t0<MOVE_TIME2){//急カーブ用プログラム
int nOnline=0;
while(nOnline<nMAX2){
if(SENSOR_1<THRESHOLD-4){
turn_left2;
nOnline++;
} else {
if(SENSOR_1<THRESHOLD){
turn_left2;
} else if(SENSOR_1<THRESHOLD+7){
go_forward;
} else if(SENSOR_1<THRESHOLD+10){
turn_right2;
} else{
turn_right1;
}
nOnline=0;
}
}
Wait(STEP);
short_break;
PlaySound(SOUND_DOUBLE_BEEP);
turn_right2;Wait(nMAX2);
cross_line;
nOnline=0;
}
go_forward;Wait(1800);//タイミングを見計らって、交差点に関係なく直進
while(CurrentTick()-t0<MOVE_TIME1){//急カーブ用プログラム
int nOnline=0;
while(nOnline<nMAX1){
if(SENSOR_1<THRESHOLD-4){
turn_left1;
nOnline++;
} else {
if(SENSOR_1<THRESHOLD+7){
go_forward;
} else if(SENSOR_1<THRESHOLD+10){
turn_right2;
} else{
turn_right1;
}
nOnline=0;
}
}
Wait(STEP);
short_break;
turn_right1;Wait(nMAX1*STEP);
cross_line;
nOnline=0;
}
}//MOVETIME1+2以内にゴールイン
- 直角を攻略するプログラムが必要のないコースになってしまった。
- やむを得ず、交差点を無視して通り過ぎることになってしまった。
- パートナーとの会う時間を設けるのが難しかった。
- 特定されたコースしか攻略できないプログラムになってしまった。