- 追加された行はこの色です。
- 削除された行はこの色です。
*目次 [#m9e8d242]
#contents
*課題 [#k6c01612]
各チームで作成したコースに沿って動くロボットを作成。
~
*速さと正確さを追求すること
*交差点で優先側を走っていない場合には、一時停止すること
*前方にあるもう一台のロボットに接触した場合には停止して相手のロボットが行き過ぎる、あるいは距離が離れるのを待つこと
*コースを3周したら自動的に止まること
#ref(2008a/A8/DSC_0001.jpg,CENTER)
*ロボッ [#f1cda9ad]
#ref(2008a/A8/課題2左/DSC_0155.jpg,CENTER)
~
~
~
#ref(2008a/A8/課題2左/DSC_0157.jpg,CENTER)
~
~
~
#ref(2008a/A8/課題2左/DSC_0158.jpg,CENTER)
~
~
~
#ref(2008a/A8/課題2左/DSC_0156.jpg,CENTER)
~
~
~
#ref(2008a/A8/課題2左/DSC_0161.jpg,CENTER)
~
~
~
#ref(2008a/A8/課題2左/DSC_0159.jpg,CENTER)
~
~
~
#ref(2008a/A8/課題2左/DSC_0160.jpg,CENTER)
~
~
~
*プログラム [#u5597e55]
#define DEGREE_OF_LIGHT 40
#define STOP_TIME 100
#define BACK_TIME 70
#define GO_TIME 200
#define RUN_TIME 5000
#define NUMOFCROSS 2
#define RIGHT 0
#define LEFT 1
#define AWARE 20
int iRun_Time = RUN_TIME * 3;
int iNumOfCross = 0;
int iDirection = LEFT;
task main ( )
{
SetSensor ( SENSOR_1, SENSOR_LIGHT );
SetSensor ( SENSOR_2, SENSOR_TOUCH );
SetSensor ( SENSOR_3, SENSOR_LIGHT );
PlaySound ( SOUND_UP );
ClearTimer ( 0 );
//while ( Timer ( 0 ) <= iRun_Time ) {
while ( iNumOfCross < NUMOFCROSS ) {
if ( SENSOR_1 > DEGREE_OF_LIGHT ) {
if ( SENSOR_3 > DEGREE_OF_LIGHT ) {
if ( Timer ( 0 ) >= AWARE) {
until ( SENSOR_1 < DEGREE_OF_LIGHT ||
SENSOR_3 < DEGREE_OF_LIGHT ) {
OnRev ( OUT_A );
OnRev ( OUT_C );
}
if ( iDirection == LEFT ) {
OnRev ( OUT_C );
OnFwd ( OUT_A );
Wait ( 40 );
until ( SENSOR_1 > DEGREE_OF_LIGHT &&
SENSOR_3 > DEGREE_OF_LIGHT ) {
OnRev ( OUT_C );
OnFwd ( OUT_A );
}
}
else {
OnRev ( OUT_A );
OnFwd ( OUT_C );
Wait ( 40 );
until ( SENSOR_1 > DEGREE_OF_LIGHT &&
SENSOR_3 > DEGREE_OF_LIGHT ) {
OnRev ( OUT_A );
OnFwd ( OUT_C);
}
}
//OnFwd ( OUT_A + OUT_C );
//Wait ( 30 );
ClearTimer ( 0 );
}
OnFwd ( OUT_A );
OnFwd ( OUT_C );
}
else {
iDirection = RIGHT;
ClearTimer ( 0 );
OnRev ( OUT_C );
OnFwd ( OUT_A );
}
}
else {
if ( SENSOR_3 > DEGREE_OF_LIGHT ) {
iDirection = LEFT;
ClearTimer ( 0 );
OnFwd ( OUT_C );
OnRev ( OUT_A );
}
else {
iNumOfCross++;
ClearTimer ( 0 );
OnRev ( OUT_A );
OnRev ( OUT_C );
PlaySound ( SOUND_DOUBLE_BEEP );
Wait ( BACK_TIME );
Off ( OUT_A );
Off ( OUT_C );
Wait ( STOP_TIME );
OnFwd ( OUT_A );
OnFwd ( OUT_C );
Wait ( GO_TIME );
iRun_Time += ( BACK_TIME + STOP_TIME );
}
}
if ( SENSOR_2 == 1 ) {
Off ( OUT_A );
Off ( OUT_C );
PlaySound ( SOUND_CLICK );
Wait ( STOP_TIME );
iRun_Time += STOP_TIME;
}
}
Off ( OUT_A + OUT_C );
PlaySound ( SOUND_LOW_BEEP );
}
*難しかったところ [#c384cee6]
*コメントをどうぞ [#qa4f7958]
#comment