- 追加された行はこの色です。
- 削除された行はこの色です。
[[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追加
}
}
}