- 追加された行はこの色です。
- 削除された行はこの色です。
[[2012a/Member]]
目次
#contents
*課題2 ライトレースロボット[#rc2a2179]
**ページ作成者 [#ec9ba8bd]
Hato
*ロボット本体 [#waa0b872]
今回はただ走るだけのロボットなので、あまり工夫はしなかった。~
強いて言うなら、タイヤ間を狭くして小回りができるようにした。
*プログラム [#m4fd895e]
#define THRESHOLD 45 //閾値~
#define go_st OnFwd(OUT_AC);~
#define go_le1 Off(OUT_A); OnFwd(OUT_C); OnRev(OUT_A); ~
#define go_ri1 Off(OUT_C); OnFwd(OUT_A); OnRev(OUT_C);~
#define go_le2 SetPower(OUT_A,2); SetPower(OUT_C,0);Off(OUT_A); OnFwd(OUT_C); OnRev(OUT_A);~
#define go_ri2 SetPower(OUT_A,0); SetPower(OUT_C,2);Off(OUT_C); OnFwd(OUT_A); OnRev(OUT_C);~
#define go_le3 SetPower(OUT_A,4); SetPower(OUT_C,1);Off(OUT_A); OnFwd(OUT_C); OnRev(OUT_A); ~
#define go_ri3 SetPower(OUT_A,2); SetPower(OUT_C,0);Off(OUT_C); OnFwd(OUT_A); OnRev(OUT_C);~
#define t_overa 1400~
#define t_overb 3000~
#define t_overc 4000~
#define t_overd 5000~
#define t_overe 5500~
#define t_overf 7000~
#define t_overg 7890~
今回のポイントは
1 出口~
2 直角カーブ~
である~
#define THRESHOLD 45 //閾値~
#define go_st OnFwd(OUT_AC);~
#define go_le1 Off(OUT_A); OnFwd(OUT_C); OnRev(OUT_A); ~
#define go_ri1 Off(OUT_C); OnFwd(OUT_A); OnRev(OUT_C);~
#define go_le2 SetPower(OUT_A,2); SetPower(OUT_C,0);Off(OUT_A); OnFwd(OUT_C); OnRev(OUT_A);~
#define go_ri2 SetPower(OUT_A,0); SetPower(OUT_C,2);Off(OUT_C); OnFwd(OUT_A); OnRev(OUT_C);~
#define go_le3 SetPower(OUT_A,4); SetPower(OUT_C,1);Off(OUT_A); OnFwd(OUT_C); OnRev(OUT_A); ~
#define go_ri3 SetPower(OUT_A,2); SetPower(OUT_C,0);Off(OUT_C); OnFwd(OUT_A); OnRev(OUT_C);~
#define t_overa 1400~
#define t_overb 3000~
#define t_overc 4000~
#define t_overd 5000~
#define t_overe 5500~
#define t_overf 7000~
#define t_overg 7890~
task main() {
ClearTimer(0); //タイマーリセット
SetPower(OUT_A,0);
SetPower(OUT_C,0);
SetSensor(SENSOR_1, SENSOR_LIGHT);
SetSensor(SENSOR_3, SENSOR_LIGHT);
int cross = 0; //両方黒になった回数をカウント
while(true){ //百回きたら止める。
if(SENSOR_1<THRESHOLD&&SENSOR_3<THRESHOLD){ //両方黒線の上にいるとき
SetPower(OUT_A,0);
SetPower(OUT_C,0);
go_st;
cross++; //カウントする
}else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)<=t_overa){ //3だけ黒線の上にあるとき
PlaySound(SOUND_CLICK);
go_st;
Wait(5);
SetPower(OUT_A,0);
SetPower(OUT_C,4);
go_ri1;
}else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)<=t_overa){ //1だけ黒線の上にある時
PlaySound(SOUND_CLICK);
go_st
Wait(5);
SetPower(OUT_A,4);
SetPower(OUT_C,0);
go_le1;
}else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overa && FastTimer(0)<=t_overb){ //直角を曲がるさい1だけ黒線の上にあるとき
go_ri3;
}else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overa && FastTimer(0)<=t_overb){ //直角を曲がるさい3だけ黒線の上にある時
SetPower(OUT_A,0);
SetPower(OUT_C,0);
go_le3;
}else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overb && FastTimer(0)<=t_overc){ //3だけ黒線の上にあるとき
PlaySound(SOUND_CLICK);
go_st;
Wait(5);
SetPower(OUT_A,0);
SetPower(OUT_C,4);
go_ri1;
}else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overb && FastTimer(0)<=t_overc){ //1だけ黒線の上にある時
PlaySound(SOUND_CLICK);
go_st
Wait(5);
SetPower(OUT_A,4);
SetPower(OUT_C,0);
go_le1;
}else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overc && FastTimer(0)<=t_overd){ //1だけ黒線の上にあるとき
SetPower(OUT_A,0);
SetPower(OUT_C,0);
go_ri2;
}else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overc && FastTimer(0)<=t_overd){ //3だけ黒線の上にある時
SetPower(OUT_A,0);
SetPower(OUT_C,0);
go_le2;
}else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overd && FastTimer(0)<=t_overe){ //3だけ黒線の上にあるとき
PlaySound(SOUND_CLICK);
go_st;
Wait(5);
SetPower(OUT_A,0);
SetPower(OUT_C,4);
go_ri1;
}else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overd && FastTimer(0)<=t_overe){ //1だけ黒線の上にある時
PlaySound(SOUND_CLICK);
go_st
Wait(5);
SetPower(OUT_A,4);
SetPower(OUT_C,0);
go_le1;
}else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overe && FastTimer(0)<=t_overf){ //1だけ黒線の上にあるとき
SetPower(OUT_A,0);
SetPower(OUT_C,0);
go_ri2;
}else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overe && FastTimer(0)<=t_overf){ //3だけ黒線の上にある時
SetPower(OUT_A,0);
SetPower(OUT_C,0);
go_le2;
}else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overf){ //3だけ黒線の上にあるとき
PlaySound(SOUND_CLICK);
go_st;
Wait(5);
SetPower(OUT_A,0);
SetPower(OUT_C,4);
go_ri1;
}else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overf){ //1だけ黒線の上にある時
PlaySound(SOUND_CLICK);
go_st
Wait(5);
SetPower(OUT_A,4);
SetPower(OUT_C,0);
go_le1;
}else if(SENSOR_1>THRESHOLD && SENSOR_3>THRESHOLD){ //両方黒の外にあるとき
SetPower(OUT_A,0);
SetPower(OUT_C,0);
go_st;
}
}
}