[[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);
    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追加
       }
    }
 }
 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(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追加
    }
 }
 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