[[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