[[2005/C4]]

* 机の周りを動くロボット [#nfb5e554]

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

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

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

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

~よって、sub turn_left()を左に曲がるためのサブルーチンとして作成した。これにより、機械が左に曲がるときは切り返しのような動きをしながら徐々に進む形となった。
*製作 [#g16a813c]
機械:ひろし & しほ
プログラム:ひろし
~機械:ひろし & しほ
~プログラム:ひろし

* プログラム [#r04691ef]
 #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)]] &new{2005-12-02 (金) 18:03:20};
-コメント文が入っていると良いですね -- [[かとりーぬ(TA)]] &new{2005-12-02 (金) 19:21:01};

#comment

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS