課題3 #contents *課題内容 [#ob7e69df] 懐中電灯の光を追いかけて進むロボットを製作し、以下の中から2種類以上のプログラムを作成せよ。 光源を見失った時には曲を演奏しながらぐるっと旋回して光源を探す 光源を見失った時には明るさに比例した周波数の音を出しながら旋回して光源を探す 光源を見失っていないときにはある曲を演奏し、見失った時には別の曲を演奏しながら光源を探す 上記のいずれかに『光源に近づき過ぎると停止する』という機能を追加する ただし支給されているモータ、光センサ、タッチセンサはいくつ使ってもよい。 *プログラム1 [#ud194d51] #define top OnFwd(OUT_A+OUT_C); //top 直進 #define right OnRev(OUT_C);OnFwd(OUT_A); //right 右旋回 #define left OnRev(OUT_A);OnFwd(OUT_C); //left 左旋回 #define minus 15 #define Do 523 #define Re 587 #define Mi 659 #define Fa 698 #define So 784 #define La 880 #define Si 988 #define So_ 392 int light_max; //light_maxを定義 int time_max; //time_maxを定義 task main() { SetSensor(SENSOR_2,SENSOR_LIGHT); //センサー2を光センサーとする light_max=SENSOR_2; //センサ−2をlight_maxに指定 time_max=Timer(0); //time_maxをTimer(0)に指定 ClearTimer(0); //Timer(0)をリセット while(Timer(0)<=14) //Timer(0)が14以下のとき { right; //右旋回 if(SENSOR_2>light_max) センサ−2が最大値より大きければ { ClearTimer(1); //Timer(1)をリセット light_max =SENSOR_2 ; //センサ−2を最大値に指定 } else //そうじゃなければ { light_max = light_max; //light_maxをそのままで time_max =Timer(1); //time_maxをTimer(1)に指定 } } ClearTimer(1); //Timer(1)をリセット while(Timer(1)<= time_max) //Timer(1)がtime_max以下の時 { left; //左旋回 } while(true) { if(SENSOR_2>= light_max-minus) //センサー2が最大値以上のとき { top; //演奏しながら直進 PlayTone(Mi,25); Wait(35); PlayTone(Mi,25); Wait(50); PlayTone(Mi,25); Wait(50); PlayTone(Do,25); Wait(30); PlayTone(Mi,40); Wait(45); PlayTone(So,50); Wait(100); PlayTone(So_,50); Wait(100); } if(SENSOR_2< light_max-minus) //センサ−2が最大値より小さいとき { right; //右旋回 ClearTimer(2); //Timer(2)をリセット until((SENSOR_2>= light_max-minus)||(Timer(2)==5)); //センサ−2が最大値以上、またはTimer(2)が5まで } if(SENSOR_2< light_max-minus) //センサ−2が最大値-マイナスより小さいとき { left; //左旋回 until(SENSOR_2>= light_max-minus); //センサ−2が最大値-マイナスまで } } } *反省点 [#j2ca8008] センサー2個でやろうとして、結局できなくて1個でやってしまった。 #comment