[[2011a/A3/課題3右]]

 #define THRESHOLD 40 //線をたどるための光センサーの敷居
 int lMax = 0; //
 int tMax = 0;
 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); 	
 	OnRev(OUT_B); //アームを開ける
 	Wait(230);
 	lMax = 0;
 	OnFwd(OUT_C);
 	ClearTimer(0);
 	while(FastTimer(0) < 450)
 	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));
 	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