- 追加された行はこの色です。
- 削除された行はこの色です。
[[2005/C4]]
* 机の周りを動くロボット [#nfb5e554]
正面と右側にタッチセンサーがついている。
右側についているセンサーで壁を触りながら移動することによって、ロボットが壁から離れないようにすることができる。
左に曲がるとき、正面のセンサーに壁が触れたとき、には、動き方に工夫が必要であった。
正面のセンサーに壁があるときに即座に左に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){
turn_left();
//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