#contents *机の周りを壁にそって走るプログラム(試作) [#b8779c00] sub straight(){ OnFwd(OUT_A+OUT_C); } sub turn_right(){ OnFwd(OUT_C); } sub turn_left(){ OnFwd(OUT_A); } void back(int t){ OnRev(OUT_A+OUT_C); Wait(t); Off(OUT_A+OUT_C); } task main(){ SetSensor(SENSOR_1,SENSOR_TOUCH); SetSensor(SENSOR_3,SENSOR_TOUCH); while(true){ if(SENSOR_3==1&&SENSOR_1!=1){//右が触れていたら straight();//前進 } if(SENSOR_3==1&&SENSOR_1==1){//両方触れていたら turn_left();//右側のセンサーが壁に触れるまで左回転 until(SENSOR_3==1&&SENSOR_1!=1); } if(SENSOR_3!=1&&SENSOR_1==1){//左が触れていたら turn_right();//右側のセンサーが壁に触れるまで右回転 until(SENSOR_3==1&&SENSOR_1!=1); } if(SENSOR_3!=1&&SENSOR_1!=1){//両方触れてなかったら turn_right();//触れるまで右回転(ここを改良した方がよい) until(SENSOR_3==1&&SENSOR_1!=1); } } } -うまく動かなかった。 -両方触れてなかったとき前進もさせなければ触れないので改良してみたい * 机の周りを壁に沿って走るプログラム(改良) [#w6e26bb6] task main() { SetSensor(SENSOR_1,SENSOR_TOUCH); SetSensor(SENSOR_3,SENSOR_TOUCH); while(true) { if ((SENSOR_1 == 0) && (SENSOR_3 == 0)) { OnFwd(OUT_A); Float(OUT_C); } if ((SENSOR_1 == 1) && (SENSOR_3 == 0)) { OnFwd(OUT_C); OnRev(OUT_A); Wait(50); } if ((SENSOR_1 == 0) && (SENSOR_3 == 1)) { OnFwd(OUT_C); Float(OUT_A); } if ((SENSOR_1 == 1) && (SENSOR_3 == 1)) { OnFwd(OUT_C); OnRev(OUT_A); Wait(80); } } } -floatを使う事により関数を使わなくてもよいシンプルなプログラムになった。 -コメントどうぞ -改正版にも解説をお願いします。 -- [[ゆん(TAM)]] &new{2005-12-09 (金) 17:26:50}; #comment