[[2008b/MemberOnly/進行状況A]]

*課題2:黒い線に沿って動くロボット [#haf54440]
**課題内容:各チームでコースに沿って動くロボットを以下の条件で作成せよ。 [#t47e2042]
・速さと正確さを追求すること。&br;
・交差点で優先側を走っていない場合には一時停止すること。&br;
・前方にいるもう1台のロボットと接触した場合には停止して相手のロボットが通過する、あるいは距離が離れるのを待つ。&br;
・コースを2周したら自動的に停止する。&br;

***とりあえずプログラム [#ded5e435]
 
void turn_right(int t )
{
	OnFwd(OUT_A);
	OnRev(OUT_C);
	Off(OUT_A+OUT_C);
}
*ロボットについて [#jd78204c]
今回使用したコースは写真のようなコースである。&br;
&ref(F1000005.JPG);&br;
**ロボット本体 [#e3cf986b]

void turn_left(int t )
{
	OnFwd(OUT_C);
	OnRev(OUT_A);
	Off(OUT_A+OUT_C);
}

void go_straight(int t )
{
	OnFwd(OUT_A+OUT_C);
	Wait(t);
	Off(OUT_A+OUT_C);
}

void go_back(int t )
{
	OnRev(OUT_A+OUT_C);
	Wait(t);
	Off(OUT_A+OUT_C);
}

#define THRESHOLD 40

#define RUN_TIME 11000  //110s

task main()
{
	SetSensor(SENSOR_1,SENSOR_LIGHT);
	SetSensor(SENSOR_2,SENSOR_TOUCH);
	SetSensor(SENSOR_3,SENSOR_LIGHT);
**プログラム [#l2593556]
今回は関数は前進する関数と後退する関数を用いた。&br;
***前進する関数 [#cf8730a9]
 void go_straight(int t ){	 //t/100秒間前進
            OnFwd(OUT_A+OUT_C);
            Wait(t);
            Off(OUT_A+OUT_C);
 }
***後退する関数 [#gac653ef]
 void go_back(int t ){          //t/100秒間後退
            OnRev(OUT_A+OUT_C);
            Wait(t);
            Off(OUT_A+OUT_C);
 }
***メインのプログラム [#s74015e9]
 #define THRESHOLD 40                      //閾値を40に設定
 #define RUN_TIME 11000  //110s       //タイマーを110秒に設定
 task main()
 {
        SetSensor(SENSOR_1,SENSOR_LIGHT);  //センサー1を光センサーに設定
        SetSensor(SENSOR_2,SENSOR_TOUCH);  //センサ−2をタッチセンサーに設定 
        SetSensor(SENSOR_3,SENSOR_LIGHT);  //センサー3を光センサーに設定
	
	ClearTimer(0);
        ClearTimer(0);           //タイマー0をクリア
	
	while(1)
	{
        while(1)
        {
	
	while(FastTimer(0)<=RUN_TIME)
        while(FastTimer(0)<=RUN_TIME)    //タイマーが110秒になったら停止
	
	{
        {
	
	if(SENSOR_2==1)
        if(SENSOR_2==1)           //タッチセンサーが反応したとき
	
	{Off(OUT_A+OUT_C);
	go_back(200);
	Wait(50);
	go_straight(200);
        {
        Off(OUT_A+OUT_C);          //1秒間後退して5秒待って1秒間前進
        go_back(100);
	Wait(500);
	go_straight(100);
	
	}
	
	else
	
	{
	 
	 if(SENSOR_1<THRESHOLD)
	 if(SENSOR_1<THRESHOLD)       //左の光センサーが値域より小さいとき
	  {
	      OnFwd(OUT_C);
	      OnFwd(OUT_C);         //0,15秒間右に旋回
	      OnRev(OUT_A);
	      Wait(15);
	  }
	 else
	  {OnFwd(OUT_A+OUT_C);}
	
	 if(SENSOR_3<THRESHOLD)
	  {OnFwd(OUT_A+OUT_C);}       //左の光センサーが値域より大きいとき前進
	 if(SENSOR_3<THRESHOLD)      //右の光センサーが値域より小さいとき
	 {
	   OnFwd(OUT_A);
	   OnFwd(OUT_A);         //0,15秒間左に旋回
	   OnRev(OUT_C);  
	   Wait(15);
	 }
	 else
	 {OnFwd(OUT_A+OUT_C);}
	 {OnFwd(OUT_A+OUT_C);}      //右の光センサーが値域より大きいとき前進
	 
	 if((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD))
	 if((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD)) //左と右両方のセンサーが値域より小さいとき
	 {
	 	Off(OUT_A+OUT_C);
	 	Wait(200);
	 	OnFwd(OUT_A+OUT_C);
	 	Off(OUT_A+OUT_C);    //一端止まって
	 	Wait(200);       //2秒間待って
	 	OnFwd(OUT_A+OUT_C);   //0,8秒間前進
	 	Wait(80);
	 }
	 else
	 
	 {OnFwd(OUT_A+OUT_C);}
	 {OnFwd(OUT_A+OUT_C);}     //そうでなければ前進
	 
	} 
	
	}	 
	 
	   Off(OUT_A+OUT_C);
	   Off(OUT_A+OUT_C);      //110秒経過したら音を鳴らしながら停止
	   PlaySound(SOUND_FAST_UP);
		 
	 }
	
	}


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS