2005/C4

机の周りを動くロボット

正面と右側にタッチセンサーがついている。

右側についているセンサーで壁を触りながら移動することによって、ロボットが壁から離れないようにすることができる。

左に曲がるとき、正面のセンサーに壁が触れたとき、には、動き方に工夫が必要であった。

正面のセンサーに壁があるときに即座に左に90度回転しようとしても、機械が壁に当たってしまって、うまく動けないからだ。

よって、sub turn_left()を左に曲がるためのサブルーチンとして作成した。これにより、機械が左に曲がるときは切り返しのような動きをしながら徐々に進む形となった。

製作

機械:ひろし & しほ

プログラム:ひろし

プログラム

#define L OUT_A
#define R OUT_C
#define SS SENSOR_1
#define SF SENSOR_3

//side sensor ->Right

int stats=0;
int statf=0;
// stats ... remember side sensor's status
// statf ... remember front sensor's status

task main(){
	
	SetSensor(SS,SENSOR_TOUCH);
	SetSensor(SF,SENSOR_TOUCH);
	
	OnFwd(R+L);
	
	while(true){
		if(SS!=stats){
			// side sensor has changed
			
			stats=SS;
			if(stats==0){
				// sensor off
				Off(R);
			}else{
				// sensor on
				OnFwd(R);
			}
			
		}else if(SF!=statf){
			// front sensor has changed
			
			statf=SF;
			if(statf==1){
				//sensor on
				turn_left(); // call helper
			}else{
				//sensor off
				OnFwd(L+R);
			}
			
		}
		
	}
	
}

// sub turn_left ... turn left 90 degrees
sub turn_left(){
	Off(L+R);
	
	OnRev(L+R);
	Wait(70);
	
	OnFwd(R);
	Off(L);
	Wait(70);
	
	OnFwd(L+R);
	if(SF!=0 && SS!=0){
		while(SS==0 && SF==0);
		
	}
}
  • プログラムは比較的よくまとまっていて見やすいのですが、コメントをいれるようにしましょう。 -- まいける(TA) 2005-12-02 (金) 18:03:20
  • コメント文が入っていると良いですね -- かとりーぬ(TA)? 2005-12-02 (金) 19:21:01


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-02-09 (木) 16:33:17