†マシンの正面に2個の光センサーが横に並んで付いています。変更点:明るい方向を探す回転の速度を遅くし、変数の使い方を工夫(詳細はこのページ下の工夫した点の項をご覧ください。//マシンの1回転する時間(Timer用。Wait用ではありません。//この時間はサブルーチンによって異なります。//このサブルーチン内専用変数(詳細はこのページ下の工夫した点の項をご覧ください。//Lに明るさの最大値を入れる。//センサー間の値の誤差を測ります。以降、このサブルーチン内ではセンサー2には誤差を加えます。//マシンが高速なため、少しずつ移動するよう一時停止する時間です。//明るい方向を探します。//明るい方向を向きます。//光を追いかけます。//計測した明るさの最大値(またはそれを超える)の場所を見つけるまでというプログラムでしたが、これでは計測したときの値から少しでも明るさが低くなるとその場所が見つからなくなり、回転し続けます。そこで、forとL--を使い、見つからない場合は最大値を1ずつ減らして見つけるようにしました。これで回転し続けることは無くなります。同じ光センサーにも個体差があり、そのせいでどうも片側のセンサーだけが強く反応したりします。そこで、明るい方向をマシンが向いたときに左右のセンサーがともに同じ明るさになったと仮定し、(実際はセンサー1の方がやや明るいが)そのときのセンサー間の誤差dを測り、以降は誤差を埋めてプログラムしました。(光を追うサブルーチンのところ)turn_timeというのはマシンが1回転する時間を表しますが、サブルーチンによって1回転する時間は異なります。そこでサブルーチン毎にturn_timeを用意しました。(turn_time1、turn_time2)こういった流れから、どのサブルーチン用の変数なのかわかりやすいように、このプログラムではサブルーチンと変数をまとめて記述するようにしました。nqcの仕様や変数の名前の重複を防ぐ理由で宣言は最初にしています。Lは二つのサブルーチンで使うのでまとめていません。工夫した点を文章で説明するのが難しかった。明るい方向まで向く方法を考えるのが大変だった。右のセンサーが強く反応して、右折ばかりするのを修正するのに苦労した。対処方法は工夫した点をご覧下さい。Toneを使っても聞いてる暇がない。(プログラムがどこまで実行されたかの目安にはなったが)(修正して回転を遅くしました。(こういう調整をキャリブレーションと言います)。12:58:42ロボを見せて下さいね。18:47:22プログラムや工夫した点など、とても詳しく書かれていますね。わかりやすくてよいページです。