2009a/A7/ロボコン

RCX下 定義

#define a OUT_A
#define b OUT_B
#define c OUT_C
#define t 40//閾値を40に設定
#define w Wait
int flag=0;
task main(){
SetSensor(SENSOR_1,SENSOR_LIGHT);//センサー1をライトセンサーにセット
SetSensor(SENSOR_2,SENSOR_TOUCH);//センサー2をライトセンサーにセット
SetSensor(SENSOR_3,SENSOR_LIGHT);//センサー3をライトセンサーにセット
ClearTimer(0); 
OnRev(a+c);
w(200);
Off(a+c);
OnRev(a);
OnFwd(c);
w(95);
Off(a+c);
while(Timer(0)<=260){  
  if(SENSOR_1>t){//もしセンサー1が閾値より高かったら左に進む
  OnRev(c);//左に進む
  Wait(5);
  Off(c);
  }
  if(SENSOR_1<t){//もしセンサー1が閾値より低かったら右に進む
  OnRev(a);
  Wait(5);
  Off(a);
  } 
} 
OnRev(c);//右に曲がって
OnFwd(a);
w(120);
Off(a+c);
OnRev(a+c);//少し下がって
w(60);
Off(a+c);
SendMessage(1);//RCX上のほうにメッセージを送る
Wait(800);
OnFwd(a+c);
w(200);
Off(a+c);
} 

RCX上

#define a OUT_A
#define b OUT_B
#define c OUT_C
#define t 40//閾値を40に設定
#define w Wait
int flag;
int flag_min=0,flag_max=100;
task main(){
ClearTimer(0);
SetSensor(SENSOR_2,SENSOR_TOUCH);//センサー2をタッチセンサーにセット
SetSensor(SENSOR_1,SENSOR_LIGHT);//センサー1をライトセンサーにセット
SetSensor(SENSOR_3,SENSOR_LIGHT);//センサー3をライトセンサーにセット
ClearMessage();
while(Message==1){//メッセージ1を受信するまで待機
Off(a+b+c);
}//while
until(SENSOR_2==1){//タッチセンサーに反応するまで直進
OnFwd(a+c);
}//until (sensor2=1)//タッチセンサーに反応したら停止
Off(a+c);
w(200);
until((SENSOR_1<40)&&(SENSOR_3<40))//センサー1とセンサー3が閾値より下になるまで後退
{
OnRev(a+c);
}//until
OnRev(a+c);//右に少しまがる
Wait(10);
OnFwd(a);
OnRev(c);
Wait(10);
until(SENSOR_3<40){//センサー3が閾値より小さくなるまで右折
OnFwd(a);
OnRev(c);}//until
repeat(2)(
while(flag<=flag_max)
start light2;//光センサータスク2を開始
   until(flag==1){//カウントが1のとき
   OnFwd(a+c);直進
   }//until(flag=1)
OnFwd(c);
OnRev(a);
w(90);
Off(a+c);
   if(flag==3||flag==7){//カウントが3と7の時
   stop light1;//光センサータスクを停止
   OnFwd(c);//右に曲がって
   w(75);
   Off(c);
   OnRev(a+c);//後ろに下がって
   w(50);
   Off(a+c);
   OnRev(b);//牛乳パックを取り込む
   w(150);
   OnFwd(a);
   OnRev(c);
   w(90);
   Off(a+c);
   OnFwd(100);
   start light1;//光センサータスクを開始
   }//if(flag=3,7)
   if(flag==4||flag==8){//カウントが4のとき
   OnFwd(a);//左に曲がる
   OnRev(c);
   w(45);
   Off(a+c);
   }
   if(flag==6||flag==11){//カウントが6のとき
   OnFwd(a);//右にまがる
   OnRev(c);
   w(45);
   Off(a+c); 
      until(SENSOR_3<t){
      OnFwd(a+c);
      }//until(sensor3)
   OnFwd(c);
   OnRev(a);
   w(45);
   Off(a+c);
   }//if(flag=3,7)
   if(flag==5){
   OnFwd(a);
   OnRev(c);
   w(45);
   Off(a+c);
   }//if(flag=5)
   if((SENSOR_2==1)&&((flag==5)||(flag==11))){//カウントとが5または11でセンサー2が反応したとき
   OnRev(a+c);//少し下がって、
   Wait(50);
   OnRev(b);
   w(100);牛乳パックを落とす
   OnRev(a+c);
   w(30);
   Off(a+c);
   }
OnFwd(a);
OnRev(c);
w(90);
Off(a+c);
}
}//task main 
task light1(){
SetSensor(SENSOR_1,SENSOR_LIGHT);//センサー1を光センサーにセット
SetSensor(SENSOR_3,SENSOR_LIGHT);//センサー3を光センサーにセット
SetSensor(SENSOR_2,SENSOR_TOUCH);//センサー2をタッチセンサーにセット
while(flag<15){//カウントが15回になるまで繰り返す
   if(SENSOR_1<t){//もしセンサー1が閾値より低かったら
   OnFwd(a);//右に進む
   w(5);
   Off(a);
   }
   else{//もしセンサー1が閾値より高かったら
   OnFwd(c);//左に進む
   w(5);
   Off(c);
   }
      if(SENSOR_3<t){//もしセンサー3が閾値より低かったら
      OnFwd(a+c);//少し前に進んで
      w(20);
      Off(a+c);
      flag++;//カウントを1追加
      }
   }
}

task light2() {//
SetSensor(SENSOR_1,SENSOR_LIGHT);//センサー1を光センサーにセット
SetSensor(SENSOR_3,SENSOR_LIGHT);//センサー3を光センサーにセット
SetSensor(SENSOR_2,SENSOR_TOUCH);//センサー2をタッチセンサーにセット
while(flag<15){//カウントが15回になるまで繰り返す
   if(SENSOR_3<t){//もしセンサー3が閾値より低かったら
   OnFwd(c);//右に進む
   w(5);
   Off(c);
   }
   if(SENSOR_3>t){//もしセンサー3が閾値より高かったら
   OnFwd(a);//左に進む
   w(5);
   Off(c);
   }
   if(SENSOR_1<t){//もしセンサー1が閾値より低かったら
   OnFwd(a+c);//少し前に進んで
   Wait(20);
   Off(a+c);
   flag++;//カウントを1追加
   }
}
}

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-08-31 (月) 23:06:52