[[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);      //台から降りる動作
}
家のパソコンと大学のパソコンとの間でプログラムのやりとりをするために作ったページ(メールに添付したりもできたのですが、このほうが楽だったので)。ほかのチームの人に見られてないか心配でした。ちなみに全て2号用のもの。本番前日に書いたもので、半分以上は使ってませんが。

task wall修正版

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

taskwall改

task check_sensors()
task wall()
{
 while(true)
 {
  if(SENSOR_1 < 40)      //黒の場合
 {
   backwords(20);
   turn_left(30);
   stop check_sensors;   //パックを放して45度旋回
  }
  else                   //緑の場合
  if(SENSOR_3 == 1)
  {
   turn_left(60);
   OnFwd(OUT_A+OUT_C);until(SENSOR_2 <= 39);
   start comeback;
   stop search;stop check_sensors;stop comeback;stop line;
   PlaySound(4);Wait(50); 
   OnRev(OUT_A);Off(OUT_C);Wait(120);
   start search;
  }
 }
} 

task comeback改

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

注:ロボ3にバンパーとメッセージの追加が必要

task wall()
task line

task line()
{
 while(true)
 {
  if(SENSOR_3 == 1)
  if(SENSOR_2 > 35)
  {
   stop search;
   backwards(100);
   turn_left(120);
   start search;
   OnFwd(OUT_C);Off(OUT_A);
  }
  else
  {
   OnFwd(OUT_A);Off(OUT_C);
  }
 }
}


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