task main()~ [#n0f0d028] { SetSensor(SENSOR_1, SENSOR_LIGHT); SetSensor(SENSOR_3, SENSOR_LIGHT); while(true) { if(SENSOR_1<40; //センサ−1が黒のライン上に乗ったら { OnFwd(OUT_C); //左折する OnRev(OUT_A); } if(SENSOR_3<40) //センサ−3が黒のラインに乗ったら { OnFwd(OUT_A); //右折する OnRev(OUT_C); } if((SENSOR_1>40)&&(SENSOR_3>40)) //もしどちらのセンサーも黒のライン上に乗ってなかったら { OnFwd(OUT_A+OUT_C); //前進する if(SENSOR_2==1) //もしセンサー2がぶつかったら { OnFwd(OUT_A) ;OnRev(OUT_C); //反転する Wait(180); OnFwd(OUT_A+OUT_C); //前進する } } } }
task main() { SetSensor(SENSOR_1, SENSOR_LIGHT); //左の光センサー SetSensor(SENSOR_3, SENSOR_LIGHT); //右の光センサー while(true) { if(SENSOR_1<40) //もし左のセンサーがライン上に乗ったら { OnFwd(OUT_C); //右折する OnRev(OUT_A); } if(SENSOR_3<40) //もし右のセンサ−がライン上に乗ったら { OnFwd(OUT_A); //左折する OnRev(OUT_C); } if((SENSOR_1>40)&&(SENSOR_3>40)) //もしどちらのセンサーもライン上に乗らなかったら { OnFwd(OUT_A+OUT_C); //前進する if(SENSOR_2==1) //もしタッチセンサーがぶつかったら { OnRev(OUT_A+OUT_C); //バックする Wait(40); OnFwd(OUT_A) ;OnRev(OUT_C); //右折する Wait(60); OnFwd(OUT_A+OUT_C); //前進する Wait(120); OnRev(OUT_A);OnFwd(OUT_C); //左折する Wait(60); OnFwd(OUT_A+OUT_C); //前進する Wait(120); OnRev(OUT_A);OnFwd(OUT_C); //左折する Wait(60); } } } }
難易度の高いプログラムだったので最初の方にエラーがでまくった。。。 while(true)の使い方がわからないまま丸写しでプログラムに挑んだためプログラムに異常が出てもどこをどうすればいいかさっぱりわからなかった。 その後ifやwhileの意味をNQC入門熟読する事によってクリアーした。 しかし上以外の原因として;や}が抜けているなどの何とも間抜けな理由も多々あった…。 どちらのプログラムも上記以外では問題なくプログラム自体は組めた。 しかしだからといって時間がかからなかった訳ではなく戻るときや相手をよけるときの時間などは前回の課題同様何回も試行錯誤を繰り返す事によって完成した。 よけるときの時間に細心の注意を払った。 さらに先ほどのプログラムでもいえるがタッチセンサーのプログラムをいれるとなぜかライントレースが 正しくできないときがしばしばありプログラミングに莫大な時間を要求した。 トレースする線の濃さに差があったため最初うまくライントレースしてくれなかった。 最初はプログラムを変更する事によって解決しようと思ったが実は線の濃さほ変えるだけでいいという事に気づいたためその後はすぐに解決した。
最初のラインとレースの図の字が太すぎたため全くラインとレースとして機能しなかった…。 しかしその問題は新しい紙で絶妙な太さの線を作った事によって解決した。 タッチセンサーを反応しやすくするためロボにバンパーを多くつけて反応しやすくした。~ ロボットに安定度をつけるためにロボットをコンパクトにしつつ、(半分趣味で)タイヤのボリュームを多くした。 追い越す瞬間のプログラミングのとき三回角度を変更する事によって安全に追い越す事ができるようになった。