[[戻る>2005/A6]] **「一番明るい方を向くロボット」 [#p19fb05f] int light_max=0; //光の最大強度を定義し、0からスタート int i; //変数iを定義 int i_brightness; //光強度最大のときのiをi_brightnessと定義 sub turn_left() //3/100秒左周り { OnFwd(OUT_A); OnRev(OUT_C); Wait(3); Off(OUT_A+OUT_C); } sub turn_right() //光強度最大の場所に右周りで戻る { OnRev(OUT_A); OnFwd(OUT_C); Wait(237-i_brightness*3); Off(OUT_A+OUT_C); } task main() { SetSensor(SENSOR_2, SENSOR_LIGHT); //センサー2を光センサに for (i=1; i<=79; i++) //1からカウントしながら79回以下の動作を繰り返す { turn_left(); //左周り if(SENSOR_2 > light_max) //もしセンサの値が直前までのlight_maxより大きければ { light_max = SENSOR_2; //その値を最大強度に i_brightness = i; //そのときのカウンタの回数をi_brightnessに Wait(3); //左周りに要する時間と同じだけ待つ } } turn_right(); //光の最大強度のところに戻る } **感想 滑らかに一回転するのに要する時間と、止まりながら一回転するのに要する時間が異るのに困った。 結局なんとなくつじつまを合わせることで解決。 コメントをどうぞ -最大値を求めた時と同様に for を使って最大の明るさのところに回転させると誤差が少なくなります。あるいはTimer を使用すればもっと滑らかに動き精度も高くなるでしょう。 -- [[松本(教員)]] &new{2006-02-02 (木) 11:04:47}; #comment