[[2004/A5]]

[[2004/A5]]

#define  forwards(t)   OnFwd(OUT_A+OUT_C);Wait(t);
#define  backwards(t)  OnRev(OUT_A+OUT_C);Wait(t);
#define  turn_right(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);
#define  turn_left(t)  OnRev(OUT_A);OnFwd(OUT_C);Wait(t);
task main()
{
 SetSensor(SENSOR_1,SENSOR_LIGHT);
 SetSensor(SENSOR_2,SENSOR_LIGHT);
 SetSensor(SENSOR_3,SENSOR_TOUCH);
 start wall;
 start search;
 forwards(200);      //台から降りる動作
}


task search()
{
 while(true)    
 {
  if(SENSOR_1 <= 39)       //青又は黒のパックが見つかるまで
  {
   repeat(3)
   { 
    forwards(200);
    turn_left(35);
    turn_right(70);
    turn_left(35);
   }
   turn_left(120);         //パックを探しながら往復
  }
  else                     //パックを見つけた場合
  {
   forwards(200);          //パックに向かって前進
  start check_sensors;    //パックが緑か黒かのチェック
  }
 }
}


task check_sensors()
{
 while(true)
 {
  if(SENSOR_1 < 40)      //黒の場合
 {
   backwords(20);
   turn_left(30);
   stop check_sensors;   //パックを放して45度旋回
  }
  else                   //緑の場合
  {
   turn_left(60);
   OnFwd(OUT_A+OUT_C);until(SENSOR_2 <= 39);
   start comeback;
  }
 }
} 


task comeback()
{
 ClearTimer(0);
 do
 { 
 stop search;
 ClearMessage();
 SendMessage();
 until(Message() != 0); 
 if(Message() == ){PlaySound(1);wait(100);SendMessage();};
 if(Message() == ){PlaySound(3);wait(100);forwards(500);backwards(200);turn_left(120);};
 Off(OUT_A+OUT_C);
 } 
 until  (Timer(0) < 150);
 turn_right(40);
 start search;
}


task wall()
{
 while(true)
 {
  if(SENSOR_3 == 1)
  {
   stop search;
   backwards(100);
   turn_left(120);
   start search;
  }
 }
}

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS