[[2005/B4]]

#contents

* ロボコンプログラム1(走行用) [#l5d9a591]
 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);//終了
      
  }
 
-一個しか運べなかった…
-でも色の識別もできてたのでもう少しやれば三つくらいは運べたかも
-今回は箱を入れてU-ターンするとこまでしかできなかったので残念でした。
-ライントレースももう少し静かにできるよう工夫した方がよかった。
-コメントどうぞ

#comment

*ロボコンプログラム(アーム用) [#r5bc8cfe]

 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);//次の箱をつかむまで待つ
        }
    }
 }

-タッチセンサーの感度に苦しめられた。
-ここのプログラムが今回のロボの特徴的な部分だとおもいます。
-こっちは比較的簡単にできました。
-アームを下げるときにFloatを使う事により自重でおりていくのでそこが良い感じだったと思います。
-コメントどうぞ
#comment

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS