初めはサメの形にしたのですが、ちょっと曲がる角度がきつ過ぎてすぐ脱線してしまうのでちょっと簡単な形にしました。
タッチセンサーと光センサー2つをつけたロボットを作ります。
すごく試行錯誤した結果、直角になっている部品と穴の開いたブロックを使って上手く縦から横にして光センサーをつけました。
完成だと思ったのですが、コースで試してみたら脱線してしまいました。
まだ2つの光センサーの幅が広いことが原因かもしれないと思って、2つのセンサーを完全にくっつけることにしました。
改造してタッチセンサーの下に光センサー2つを並べてくっつけることにしました。
しかしセンサーが下についてしまいます。
相手のロボットに接触したら反転して進むプログラムを作ります。
タッチセンサーと光センサーがどの場所につながっているか気をつけながら作りました。
タッチセンサーをBにつなげてプログラムを作ったのですが、それでは動かなかったので、タッチセンサーを2の方に重ねてつなげて下のプログラムでやってみました。
ばっちり動きました!!
#define THRESHOLD 40 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); SetSensor(SENSOR_2,SENSOR_TOUCH); while(true) { if(SENSOR_3<THRESHOLD) {OnFwd(OUT_A); Off(OUT_C);} if(SENSOR_1<THRESHOLD) {OnFwd(OUT_C); Off(OUT_A);} if(SENSOR_2==1) {OnRev(OUT_A+OUT_C); Wait(50); OnFwd(OUT_A); OnRev(OUT_C); Wait(50); } } }
このプログラムはifやwhileを使ったNQC入門で学んだ基本的なプログラムを利用して作りました。
『&&』を仮定式のところで利用して仮定式を一つに分かりやすくまとめた事です。
二つの光センサーは間隔を変えられるように取り付けたので、プログラムはあまり変えずに、ロボットの光センサーの位置を変える事でコース上をロボットがうまく動けるように工夫した。
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_2>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); OnFwd(OUT_C);OnRev(OUT_A); Wait(60); OnFwd(OUT_A+OUT_C); Wait(120); OnFwd(OUT_C); OnRev(OUT_A); Wait(60); } } } }