2011a/A3/課題3右

#define THRESHOLD 40 //線をたどるための光センサーの敷居
int lMax = 0; //前向きのセンサーの一番高い値
int tMax = 0; //前向きのセンサーが一番高い値を見た時間

//黒い線をたどる関数
task kijun_ugoki()
{
	while (true) 
	{
	 	if (SENSOR_2 > THRESHOLD) 
	 	{
	 	 	OnFwd(OUT_A);
	 	 	Float(OUT_C);
	 	}
	 	else
	 	{
	 	 	Float(OUT_A);
	 	 	OnFwd(OUT_C);
	 	}
	}
}

//ロボットをランプに向ける
sub hikari_sagasu()
{
	Off(OUT_A+OUT_C);
	OnRev(OUT_B); //アームを開ける
	Wait(230);
	lMax = 0;
	OnFwd(OUT_C);
	ClearTimer(0);
	while(FastTimer(0) < 450) //約360&#186; 回す
	{
	 	OnRev(OUT_A);
	 	//一番明るい方向(ランプ向き)を探知して、時間を記録する
	 	if(SENSOR_3 > lMax) {lMax = SENSOR_3; tMax = FastTimer(0);}
	}
	OnFwd(OUT_A);
	OnRev(OUT_C);
	Wait((563 - tMax)); //ランプの方向より約90&#186; 回す(けるための位置)
}

//ける動作。アームの側面で押しながら、左に曲がる
sub keru()
{
	Off(OUT_A+OUT_C);
	OnFwd(OUT_B);
	Wait(180);
	Off(OUT_B);
	OnRev(OUT_A+OUT_C);
	Wait(80);
	Off(OUT_A+OUT_C);
	OnRev(OUT_B);
	Wait(180);
	Off(OUT_B);
	OnFwd(OUT_A);
	OnRev(OUT_C);
	Wait(35);
	OnFwd(OUT_C);
	Wait(100);
	OnRev(OUT_A);
	Wait(200);
	Off(OUT_A+OUT_C);
}

task main()
{
	SetSensor(SENSOR_1,SENSOR_TOUCH);
	SetSensor(SENSOR_2,SENSOR_LIGHT);
	SetSensor(SENSOR_3,SENSOR_LIGHT);
	int i = 0;
	for(i = 0; i < 3; i++)
	{
	 	OnFwd(OUT_B); //アームを開ける
	 	Wait(180);
	 	Off(OUT_B);
	 	start kijun_ugoki; //線をたどる
	 	until(SENSOR_1 == 1); //テニスボールを押すまで
	 	stop kijun_ugoki;
	 	
	 	hikari_sagasu(); //ランプの位置からロボットの位置を変える
	
	 	keru(); //アームを使って、ボールをける
	}
	Off(OUT_A+OUT_C+OUT_B);
}

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-07-08 (金) 16:44:07