今回の課題では、光センサーの部分をどのように装着するべきか、光をどのように探知するかに重点をおくべきでした。
前回の課題2からのロボのベースステーションを用いて、光センサーを装着するようにしました。
制作をしている中での、変更点は光センサーを2個から1個にしたことです。
int Light=85; int turn_time=300; int light_max=0; int time_max; task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); ClearTimer(0); while(FastTimer(0)<turn_time){ OnFwd(OUT_A); OnRev(OUT_C); PlayTone(SENSOR_1*10,3); if(SENSOR_1>light_max){ light_max=SENSOR_1; time_max=FastTimer(0); } } while(Timer(0)<=turn_time) { if(SENSOR_1>Light) { Light=SENSOR_1; } OnFwd(OUT_A); OnRev(OUT_C); } OnFwd(OUT_A); OnRev(OUT_C); until(SENSOR_1>=Light); while(true) { if(SENSOR_1<Light) { OnFwd(OUT_A); OnRev(OUT_C); } else if (SENSOR_1>= Light){ OnFwd(OUT_A+OUT_C); } } }
最終的に光センサーは2個の方でも良かったという反省が出た。
コンパイルしてもなかなかできなくて苦労した(笑)
#define turn_right OnFwd(OUT_A);OnRev(OUT_C); #define turn_left OnFwd(OUT_C);OnRev(OUT_A); #define go_straight OnFwd(OUT_A+OUT_C) #define light 50 task main(){ int max_right,time_max; SetSensor(SENSOR_1,SENSOR_LIGHT);//センサー1を光センサーと定義 SetSensor(SENSOR_3,SENSOR_LIGHT);//センサ−3を光センサーと定義 while(true){ if(SENSOR_1>light&&SENSOR_3<light){ //左側のセンサーが反応 turn_left; Wait(10); } if(SENSOR_1<light&&SENSOR_3>light){ //右側のセンサーが反応 turn_right; Wait(10); } if(SENSOR_1<light&&SENSOR_3<light){ //両方反応しない while(SENSOR_1<light||SENSOR_3<light){//両方反応するまで turn_left //左回転 Wait(10); until(SENSOR_1>light||SENSOR_3>light); } } if(SENSOR_1>light&&SENSOR_3>light){ //両方反応 go_straight; //直進 } } }
やはりいままでのもそうだったができるだけシンプルなものにしてみた。光センサーを一つでは、少し近づけすぎないといけないという無理があった。その中で、一つの光センサーでっていうのは甘かった。これでも光センサーを2個使っているので、前のやつよりかは精度がかなり増した。
コメントをお願いします。