光センサー1つを可動式にし、最も強い光の方を向くプログラム     progrm editer   Hideshi

機体概略

メリット      最も強い光を確実に感知できる

デメリット     光の感知にかかる時間が長い

基本プログラム

void Right_Turn(int t) {SetPower(OUT_C,10);SetPower(OUT_A,2);OnFwd(OUT_A+OUT_C);Wait(t);}
      //配線が入り組んで分かりにくくなったので、基本的な動きは全て定義した
      //機体の旋回時間は、最も強い光を向くために微調整の必要があるので、voidを使用した
void Left_Turn(int t){SetPower(OUT_A,10);SetPower(OUT_C,2);OnRev(OUT_A+OUT_C);Wait(t);}
      //同上
sub Stop(){Off(OUT_A+OUT_C);}
      //同上
int Light_Max=0;                             //光センサーが、最も強い光を覚えるための文字を定義
int Action_Time=0;                         //機体が旋回するための時間を定義
int The_T=0;                                   //最も強い光を感知するのにかかった時間を覚えるために定義

実際に動かす

task main(){
SetPower(OUT_B,6);
        //モータBは機体上部の可変型光センサー  
        //モータの力が強いと、動いた拍子に機体がぶれてしまうので、若干弱めるように設定した
for(The_T=0;The_T<=75;The_T=The_T+5)
        //機体上部の可変型光センサーが動く時間を定義
        //可変型光センサーは丁度時計の秒針のように、少し進んで止まるように設定
        //この動作を計15回繰り返す
{OnFwd(OUT_B);Wait(5);Off(OUT_B);
        //時計の秒針のように可変型光センサーを動かすプログラム(下のWait(30)も含めて)
if(SENSOR_2>Light_Max{Light_Max=SENSOR_2;Action_Time=The_T;PlaySound(SOUND_UP);};
        //光センサーが動いている最中に、以前記憶した光よりも強い光を感知した場合、改めてその値を光の明るさを定義し、確認音を鳴らす
Wait (30);};
        //秒針の動きをなすプログラムの1つ
OnRev(OUT_B);Wait(55);Off(OUT_B);
        //光センサーを元の位置に戻すプログラム
        //光センサーに繋がっているコードが絡まるため、半回転させて元の位置に戻す必要がある
 //ここまでが機体上部の光センサーだけのためのプログラムで、以下は機体自体を動かすプログラム
if(Action_Time<45){Left_Turn((45-Action_Time)*2);}
        //光センサーが機体の左側で光の最大を感知した場合、機体は左旋回で光の方を向く
else{Right_Turn((Action_Time-45)*2);}
        //光センサーが機体の右側で光の最大を感知した場合、機体は右旋回で光の方を向く
Stop();
}

感想

コメントをお願いします



トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2005-12-18 (日) 11:56:01