- 追加された行はこの色です。
- 削除された行はこの色です。
[[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;
task main(){
SetSensor(SS,SENSOR_TOUCH);
SetSensor(SF,SENSOR_TOUCH);
OnFwd(R+L);
while(true){
if(SS!=stats){
stats=SS;
if(stats==0){
Off(R);
}else{
OnFwd(R);
}
}else if(SF!=statf){
statf=SF;
if(statf==1){
turn_left();
}else{
OnFwd(L+R);
}
}
}
}
sub turn_left(){
Off(L+R);
OnRev(L+R);
Wait(70);
OnFwd(R);
Off(L);
Wait(70);
OnFwd(L+R);
while(SF!=0 && SS!=0){
if(SF!=0 && SS!=0){
while(SS==0 && SF==0);
}
OnFwd(L+R);
}
#comment