黄色いホイールを2個以上連射するロボットを作成し、以下の動きをするようにプログラムを作成せよ。ただし1,3は懐中電灯を2個使用し、ロボットの動作中は懐中電灯を動かさないがいろいろな距離や方向にある懐中電灯に対応できるロボットにすること。2は懐中電灯を1個使用し懐中電灯をゆっくり動かす。
懐中電灯の代わりに携帯のライトなどを利用してもよい。
田島 美斎津
全体的にコンパクトにして、バランスを良くした。
二発目の弾は、上から落ちてくるようにした。
弾を撃つ場所がぶれないように、固定するようにした。 それにより、二発目も安定して落ちてくるようになった。
#define shot OnRev(OUT_B); Wait(10); OnFwd(OUT_B); Wait(30); Off(OUT_B); int move_time1 int move_time2 int light1 int light2 task main(){ ClearTimer(0); //タイマーをゼロにする light1 = 0; light2 = 0; move_time1 = 0; move_time2 = 0; SetSensor(SENSOR_3,SENSOR_LIGHT); OnFwd(OUT_A); //回転する OnRev(OUT_C); while(FastTimer(0) < 450) { //4、5秒間はwhileの中をする if((SENSOR_3 > light2)&&(light2 < light1)){ //もしSENSOR_3がlight2より大きくかつlight2がlight1よりも大きいとき light2 = SENSOR_3; //light2にSENSOR_3を代入する move_time2 = FastTimer(0); } //move_2にFastTimer(0)を代入する else if(SENSOR_3 > light1) { //SENSOR_3がlight1より大きいとき light1 = SENSOR_3; //light1にSENSOR_3を代入する move_time1 = FastTimer1; } //move_tine1にFastTimer(0)を代入する } Off(OUT_A+OUT_C); //回転を止める Wait(50); //0、5秒待つ OnFwd(OUT_C); //回転する OnRev(OUT_A); Wait(450 - move_time2); //光源まで回転する Off(OUT_A+OUT_C); shot //弾を打つ OnFwd(OUT_A); //回転する OnRev(OUT_C); Wait(move_time1); //光源まで回る Off(OUT_A+OUT_C); shot //弾を打つ }
#define light 65 //懐中電灯の光の値 #define go_straight OnFwd(OUT_C+OUT_A);Wait(100);//まっすぐ進む #define TURN_RIGHT OnFwd(OUT_C);OnRev(OUT_A);//右に旋回する #define TURN_LEFT OnFwd(OUT_A);OnRev(OUT_C);//左に旋回する #define TURN_TIME 100//90度旋回する時間 #define shoot 80//弾を打つときの光の値 #define shot OnRev(OUT_B);Wait(10);OnFwd(OUT_B);Wait(30);Off(OUT_B);//玉を打つ task main() { SetSensor(SENSOR_3, SENSOR_LIGHT);//センサー3を光センサーとする int count=0;//弾を打った回数 ClearTimer(0);// Timer(0) をリセット while(count<2)//弾を二回打つまで繰り返す { if(SENSOR_3 > shoot)//光センサーが懐中電灯に近づいたとき { Off(OUT_C+OUT_A);//1秒止まる Wait(100); shot;//弾を打つ count++;//弾を打った回数を増やす ClearTimer(0);// Timer(0) をリセット } else if(SENSOR_3 > light)//光センサーが懐中電灯に反応したとき { ClearTimer(0);// Timer(0) をリセット go_straight;//まっすぐ進む } else if((SENSOR_3 < light)&&(Timer(0) > TURN_TIME))//光センサーに反応がないまま1秒たったとき { TURN_LEFT;//左に旋回する } else if(SENSOR_3 < light)//光センサーに反応がないとき { ClearTimer(0);// Timer(0) をリセット TURN_RIGHT;//右に旋回する } } Off(OUT_C+OUT_A);//弾を二回打ったときロボットを停止させる }
今回はテスト前ということもあり、あまり時間が無く、完成させることが出来なかった。なので、プログラムが未完成でうまく作動しない。自分としても、どのようにすればうまく動かすことが出来るのかわからず、とても困った。ロボットの方は、美斎津君にまかせっきりで、手を出していない。最後のロボコンは、精一杯がんばりたいと思う。