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