2005/B4

ロボコンプログラム1(走行用)

int count2;//箱仕分け用カウント変数
#define light_m 46//ライントレース用白、黒判断基準値
void first(){//箱をつかむまでの最初の動き
	OnFwd(OUT_A+OUT_C);//箱まで前進
     Wait(50);
     Off(OUT_A+OUT_C);
     OnRev(OUT_B);//箱をつかむ
     Wait(65);
     Off(OUT_B);
     Wait(100);
     OnRev(OUT_A+OUT_C);//ラインをつかむ
     Wait(65);
     Off(OUT_A+OUT_C);
     OnFwd(OUT_C);
     OnRev(OUT_A);
     Wait(25);
	while((SENSOR_1 > light_m)){
     OnFwd(OUT_A+OUT_C);
     }
     }
void trace(){ライントレース用プログラム
 int count1=0;   
 while(true) { 
   if ((SENSOR_1 > light_m) && (SENSOR_3 < light_m))//右のセンサー黒
       {
           OnFwd(OUT_A);//左回転
           Off(OUT_C);
           Wait(2);
       }
   if ((SENSOR_1 < light_m) && (SENSOR_3 > light_m))//左のセンサー黒
       {
           OnFwd(OUT_C);//右回転
           Off(OUT_A);
           Wait(2);
           
       }
   if ((SENSOR_1 < light_m) && (SENSOR_3 < light_m))//クロスしてる部分を感知したら(両方黒)
       {
       	PlaySound(SOUND_CLICK);
           OnFwd(OUT_A+OUT_C);//少しだけ前進してラインをとばす
           Wait(20);
           count1++;//何個クロスを通過したかのカウント
       }
       if(count1==count2){//色別の箱の所まで行ったら箱を落とすため
break;//ライントレースをやめる。
       }	
       }
       }
 void trace_r(){//戻る時のライントレース用関数
 int count1=0;   
 while(true) { 
   if ((SENSOR_1 > light_m) && (SENSOR_3 < light_m))
       {
           OnFwd(OUT_A);
           Off(OUT_C);
           Wait(2);
       }
   if ((SENSOR_1 < light_m) && (SENSOR_3 > light_m))
       {
           OnFwd(OUT_C);
           Off(OUT_A);
           Wait(2);
           
       }
   if ((SENSOR_1 < light_m) && (SENSOR_3 < light_m))
       {
       	PlaySound(SOUND_CLICK);
           OnFwd(OUT_A+OUT_C);
           Wait(20);
           count1++;
       }
     if(count1==count2){//箱の前まで行ったら
    PlaySound(SOUND_UP);
    /*OnFwd(OUT_A+OUT_C);
    Wait(10);*/
    OnRev(OUT_C+OUT_A);//方向転換
     Wait(10);
     while((SENSOR_1 > light_m)){
     OnFwd(OUT_A);
     OnRev(OUT_C);
     }
    break;//ループ抜け
     }
       }
     OnFwd(OUT_C);//初期配置に戻る
     OnRev(OUT_A);
     Wait(40);
     while((SENSOR_3 > light_m)){
     OnFwd(OUT_C);
     OnRev(OUT_A);
     }  	
       
  }
task main()
{    
	SetSensor(SENSOR_1,SENSOR_LIGHT);//センサーセット
  	SetSensor(SENSOR_2,SENSOR_LIGHT);//センサーセット
  	SetSensor(SENSOR_3,SENSOR_LIGHT);//センサーセット
   
   int count_white=2,count_green=1,count_black=3,count3=0;//色を分けるための変数
     //repeat(3){3回行う(ほんとはやりたかった…
     first();//初期動作(箱をつかむ)
     if((SENSOR_2>=50)&&(SENSOR_2<=60)){//white(各パターン
     count2=count_white;//カウントの変更
     trace();
     }
     if((SENSOR_2>=30)&&(SENSOR_2<=40)){//black
     count2=count_black;
     trace();
     }
     if((SENSOR_2>=40)&&(SENSOR_2<=50)){//green
     count2=count_green;
     trace();
     }
     OnFwd(OUT_A);//箱に近づく命令
     OnRev(OUT_C);
     Wait(20);
     OnFwd(OUT_A+OUT_C);
     Wait(110);
     Off(OUT_A+OUT_C);
     Wait(100);
     OnFwd(OUT_B);//box out
     Wait(65);
     	Wait(30);
     OnRev(OUT_B);
     Wait(70);
     Off(OUT_B);//arm stop
     OnRev(OUT_A+OUT_C);//back
     Wait(100);
     while((SENSOR_1 > light_m)){//U-turn
     OnFwd(OUT_A);
     OnRev(OUT_C);
     }
     OnFwd(OUT_A);
     OnRev(OUT_C);
     Wait(40);
     while((SENSOR_1 > light_m)){
     OnFwd(OUT_A);
     OnRev(OUT_C);
     }
     Off(OUT_A+OUT_C);//終了
     
 }

ロボコンプログラム(アーム用)

task main()
{
   SetSensor(SENSOR_1,SENSOR_TOUCH);//センサーセット
   
   while(true)
   {
       until(SENSOR_1 == 1);//センサが感知するまで待つ
       Wait(150);//箱をつかんだ後に上げたいので待つ。
       if(SENSOR_1 == 1)//箱に触れたら
       {
           OnFwd(OUT_A+OUT_C);//アーム持ち上げ
           Wait(60);
           Off(OUT_A+OUT_C);
           Wait(300);//アームを持ち上げてる最中にタッチセンサーが0になる事があったのでWait
           until(SENSOR_1 == 0);//箱を離すまでまつ
       }
       
       if(SENSOR_1 == 0)//箱を落としたら
       {
           OnRev(OUT_A+OUT_C);//アームを下げる
           Wait(10);
           Float(OUT_A+OUT_C);
           until(SENSOR_1 == 1);//次の箱をつかむまで待つ
       }
   }
}

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-02-07 (火) 18:52:03