白いホイールを投げるロボットを作成し、以下の動きをするようにプログラムを作成した。
#define TURN_TIME 30 task main(){ int light_max=0; int t_max=0; SetSensor(SENSOR_1,SENSOR_LIGHT); //一番明るい方向を探し出す ClearTimer(0);OnFwd(OUT_A); while ( Timer(0)<TURN_TIME){ if(SENSOR_1>light_max){ light_max=SENSOR_1; t_max=Timer(0); } } Off(OUT_A); Wait(50); OnFwd(OUT_A); Wait(t_max); Off(OUT_A); while(SENSOR_1<60){ //明るくなるまで近づく OnRev(OUT_A); } Off(OUT_A); OnRev(OUT_B); Wait(20); }
#define L 60 //Lは光を探すときに用いる #define M 80 //Mは光との距離をはかるのに用いる task main(){ SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_2,SENSOR_LIGHT); while((SENSOR_1<M)&&(SENSOR_2<M)){ //光に近づくまで繰り返し if(SENSOR_1>L){ //どちらも明るければ直進 if(SENSOR_2>L){ OnFwd(OUT_A); Wait(50); OnRev(OUT_A); Wait(50); }else{ //左が明るければ左に行く OnFwd(OUT_A); Wait(100); }else{ if(SENSOR_2>L){ //右が明るければ右に OnRev(OUT_A); }else{ //どちらも暗ければ反転 OnFwd(OUT_A); Wait(100); } } } OnFwd(OUT_B); //光に近づけばブロックを投げる Wait(50); Off(OUT_B); }
#define L 60 #define M 80 #define TURN_TIME 400 task main(){ int light_max=0; int t_max=0; SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_2,SENSOR_LIGHT); ClearTimer(1); while(Timer(1)<7){ //7秒間繰り返す if(SENSOR_1>L){ if(SENSOR_2>L){ OnFwd(OUT_A); Wait(50); OnRev(OUT_A); Wait(50); }else{ OnFwd(OUT_A); Wait(100); } }else{ if(SENSOR_2>L) {OnRev(OUT_A); }else{ ClearTimer(1); //どちらのセンサーも暗くなったらタイマーをリセット ClearTimer(0);OnFwd(OUT_A); while(Timer(0)<TURN_TIME){ //どちらのセンサーも暗くなったら周囲で一番明るい方向を探す if(SENSOR_1>light_max){ light_max=SENSOR_1; t_max=Timer(0); } } OnFwd(OUT_A); Wait(t_max); Off(OUT_A); } } } OnFwd(OUT_B); //7秒たったら投げる Wait(50); Off(OUT_B); }
全く見当もつかないような課題だったが今回は先生がヒントをくれたおかげで楽とはいかなかったが比較的失敗は少なく出来た。 しかし、プログラムがあまり簡単に出来てないのでまだまだ改善していきたい。
コメントお願いします。