[[2018b/Member]]
#contents
*課題2 [#g0917994]
*課題2 [#o5399089]
課題2のコース
&ref(http://yakushi.shinshu-u.ac.jp/robotics/?plugin=attach&pcmd=open&file=2018b-mission2.png&refer=2018b%2FMember%2Fyuto%2FMission2);

このコースで、次のルートを通る
    ロボットを正方形X内におき、Lをスタート
    Eを一時停止して直進
    Iを一時停止して左折
    Hを直進
    Kを直進
    Jを左折
    Cを一時停止して右折
    Eを一時停止して直進
    Gを一時停止して直進
    長方形X内に入って停止
*ロボットの概要 [#w0a4fd15]
**光センサー [#s3815857]
**超音波センサー [#x0c1b05e]
*プログラミング [#t9db7ee0]
#define migi0 OnFwd(OUT_A,15);OnRev(OUT_C,10); 
#define migi1 OnFwd(OUT_A,15);Off(OUT_C); 
#define hidari0 OnFwd(OUT_C,15);OnRev(OUT_A,10); 
#define hidari1 OnFwd(OUT_C,15);Off(OUT_A); 
#define middle 48 
#define go(time) OnFwd(OUT_AC,15);Wait(time);Off(OUT_AC); 
#define back(time) OnRev(OUT_AC,15);Wait(time);Off(OUT_AC); 
#define LEFT(angle) OnFwd(OUT_C,15);OnRev(OUT_A,10);Wait(angle);Off(OUT_AC); 
#define RIGHT(angle) OnFwd(OUT_A,15);OnRev(OUT_C,10);Wait(angle);Off(OUT_AC); 
sub Line()
{
 SetSensorLight(S1);
 long t0=CurrentTick();
 while(CurrentTick()-t0<=28) 
	{
	if(SENSOR_1>middle+8)
		{
		migi0;
		t0=CurrentTick();
		}
	else if(SENSOR_1>middle+6)
		{
		migi1;
		t0=CurrentTick();
		}
	else if(SENSOR_1>middle)
		{
		OnFwd(OUT_AC,30);
		t0=CurrentTick();
                }
	else if(SENSOR_1>middle-6)
		{
		hidari0;
		t0=CurrentTick();
		}
	else
		{
		hidari1;
              t0=CurrentTick();
		}
	}
Off(OUT_AC); 
}
sub Line2() 
{
 SetSensorLight(S1);
 long t0=CurrentTick();
 while(CurrentTick()-t0<=28)
	{
	if(SENSOR_1>middle+8)
		{
		migi0;
                t0=CurrentTick();
		}
	else if(SENSOR_1>middle+6)
		{
		migi1;
              t0=CurrentTick();  
		}
	else if(SENSOR_1>middle)
		{
		OnFwd(OUT_AC,30); 
              t0=CurrentTick();
		}
	else if(SENSOR_1>middle-6)
		{
		hidari0;
              t0=CurrentTick();
                }
	else
		{
		hidari1;
              t0=CurrentTick();
		}
	}
Off(OUT_AC);
}
void mitsukeru()
{
   ResetTachoCount(OUT_ABC);
   OnFwd(OUT_A,50);
   OnRev(OUT_C,50);
   SetSensorLowspeed(S4);            
   int d1;
   d1=1000;  
   long t0=CurrentTick();
   long t1=CurrentTick();
   long t2=CurrentTick();
   while(t2-t0<=3570){
       t2=CurrentTick();
       if(SensorUS(S4)<d1){
           d1=SensorUS(S4);
           t1=CurrentTick();
       }
       t2=CurrentTick();
   }
   t0=CurrentTick();
   Off(OUT_AC);
   OnFwd(OUT_C,50);
   OnRev(OUT_A,50);
   Wait(t0-t1);
}
task main()
{
 Line();
 RIGHT(15);
 Line();
 Wait(1000);
 LEFT(15);
 Line();
 go(50);
 mitsukeru();
 OnFwd(OUT_B,30);
 Wait(2000);
 Off(OUT_B);
 Line();
 go(50);
 Line();
 LEFT(15);
 Line();
 Wait(1000);
 LEFT(15);
 Line2();
 Line();
 Wait(1000);
 RIGHT(15);
 Line();
 go(100);
 Off(OUT_BC);
}

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