2004/B1/28班練習問題

光を追いかけるロボット(未完成)

 task main(){
	SetSensor(SENSOR_2, SENSOR_LIGHT); //光センサー準備
	int a,b,time; //関数準備
	a = 0; //光の強さ用関数
	b = 0; //回転方向用関数
	time = 0; //回転時間用関数
	
	ClearTimer(0);
	while(Timer(0) < 32){ //32の値(回転時間)は調整が必要
		OnFwd(OUT_A);
		OnRev(OUT_C);
		if(SENSOR_2 > a){
			a = SENSOR_2; //今までで一番強かった光の値
			time = Timer(0); //上の光を観測した時間
		}
	}
	
	Off(OUT_A + OUT_C);Wait(100);
	
	ClearTimer(0);
	while(Timer(0) < time){ //timeの時間だけ回す
		OnFwd(OUT_A);
		OnRev(OUT_C);
	}
	
	Off(OUT_A + OUT_C);Wait(100);
	
	while(true){
		OnFwd(OUT_A + OUT_C); //とりあえず前進
		if(SENSOR_2 < a && b == 0){ //光が遠のいた&直前に左に回ったまたは初めて回る
			until(a <= SENSOR_2 || Timer(0) == 3){ //光を見つけるか、指定時間経つまで回る
				OnRev(OUT_A);
			}
			Off(OUT_A + OUT_C);
			if(a <= SENSOR_2){ //光が見つかったら直進する
				b = 0;
				a = SENSOR_2;
			}else{ //見つからなかったら右に回る
				b = 1;
			}
			if(b == 1){ //左に回って見つからなかった
				until(a <= SENSOR_2 || Timer(0) == 3){
					OnRev(OUT_C);
					OnFwd(OUT_A);
				}
				if(a <= SENSOR_2){
					b - 1;
					a = SENSOR_2;
				}else{
					Off(OUT_A + OUT_C);
					break;
				}
			}
		}
		if(SENSOR_2 < a && b == 1){ //直前に右に回ったとき
			until(a <= SENSOR_2 || Timer(0) == 3){
				OnRev(OUT_C);
			}
			Off(OUT_A + OUT_C);
			if(a <= SENSOR_2){
				a = SENSOR_2;
				b = 1;
			}else{
				b = 0;
			}
			if(b == 0){
				until(a <= SENSOR_2 || Timer(0) == 3){
					OnRev(OUT_A);
					OnFwd(OUT_C);
				}
				if(a <= SENSOR_2){
					b = 0;
					a = SENSOR_2;
				}else{
					Off(OUT_A + OUT_C);
					break;
				}
			}
		}
	}
}

うまく動かなかった…
制作者&文責 蓮井


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2005-01-31 (月) 21:07:09 (5313d)