[[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