[[2006b/A1/kuroneko]] 衝突後回り込むプログラムです。 #define time 160 sub turn_r() 直角に右へ曲がります。 { OnRev(OUT_C); Wait(96); OnFwd(OUT_C); } sub turn_l() 直角に左へ曲がります。 { OnRev(OUT_A); Wait(96); OnFwd(OUT_A); } task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_2,SENSOR_TOUCH); SetSensor(SENSOR_3,SENSOR_LIGHT); while(true) { OnFwd(OUT_A+OUT_C); if(SENSOR_1<40) 左のセンサーが黒線の上に来たら・・・↓ { Off(OUT_A); 左へ大きく少しだけ曲がります。 Wait(5); if(SENSOR_1<40) まだ黒線の上にいるようなら・・・↓ { OnRev(OUT_A); 左モーターを止めただけの先ほどと違い、 until(SENSOR_1>40); 左モーターを逆回転させより小さく回転させます。 } } if (SENSOR_3<40) 上の左右逆版です。 { Off(OUT_C); Wait(5); if(SENSOR_3<40) { OnRev(OUT_C); until(SENSOR_3>40); } } if(SENSOR_2==1) 衝突したら・・・ { OnRev(OUT_A+OUT_C); ちょっとバックします。 Wait(30); sub turn_r(); 右へ旋回して少し前進。 Wait(time); sub turn_l(); 左へ旋回して少し前進。 Wait(time); sub turn_l(); 左へ旋回して前進。これでコの字を描きます。 until(SENSOR_1<40); 黒線の上に戻ります。 Wait(40); sub turn_r(); } } } [[衝突後Uターンするプログラムはこちら。>2006b/A1/kuroneko/2nd_robot-t2]] [[衝突後Uターンするプログラムはこちら。>2006b/A1/kuroneko/2nd_robot-return]]