[[戻る>2005/A6/課題4左]] *懐中電灯の光に向かって進むプログラム [#q196ca92] **untilを使ったプログラム [#w52e603c] // 12月5日 // コンド // 機体は課題3のモーターが二つあるタイプの機体をもとに // 三輪で後ろがキャスターになっている(プログラム:パート1) int light = 0; int turn_time = 30; task main() { SetSensor(SENSOR_2, SENSOR_LIGHT); // 真ん中のライトセンサー ClearTimer(0); // タイマー0をリセットする while(Timer(0) <= turn_time) // 4秒以内の動き { if(SENSOR_2 > light) // センサー2が『light』の光量より多いとき { light = SENSOR_2; // 『light』をセンサー2で示した値に置き換える } OnFwd(OUT_A); // 左タイヤが正転 OnRev(OUT_A); // 右タイヤが後転 } OnFwd(OUT_A); // 左タイヤが正転 OnRev(OUT_A); // 右タイヤが後転 until(SENSOR_2 >= light); // センサー2の値以上になるまで while(true) { if(SENSOR_2 < light) // センサーが懐中電灯の光から外れたとき { OnFwd(OUT_A); // 左タイヤが正転 OnRev(OUT_C); // 右タイヤが後転 until(SENSOR_2 >= light); // センサーが懐中電灯の光を見るまで } else // センサーが懐中電灯の光を見たとき { OnFwd(OUT_A + OUT_C); // 前進する until(SENSOR_2 < light); // センサーが懐中電灯から外れるまで } } } **反省 [#re91764d] ・懐中電灯の光を探してくるくる回る。 ・初めてタイマーを使ってみて、とりあえずうまくいった。 #comment **repeatを使ったプログラム [#z6637344] // 12月9日 // コンド // プログラム:パート2 int light = 0; int i = 0; int i_max = 0; task main() { SetSensor(SENSOR_2, SENSOR_LIGHT); // 真ん中のライトセンサー OnFwd(OUT_A); // 左タイヤが正転 OnRev(OUT_C); // 右タイヤが後転 repeat(60) // 一回転するまで繰り返す { if(SENSOR_2 > light) // センサー2が『light』の光量より多いとき { light = SENSOR_2; // 『light』をセンサー2で示した値に置き換える i_max = i; // i_maxをiに置き換える } PlayTone(light*10,5); // 光量に合わせた音を出す Wait(5); // 0.05秒待つ i++; // iを一つ増やす } OnFwd(OUT_C); // 左タイヤが正転 OnRev(OUT_A); // 右タイヤが後転 Wait(i_max); // 懐中電灯のある方向まで回る OnFwd(OUT_A + OUT_C); // 懐中電灯に向かって進む while(true) { if(SENSOR_2 < light) // センサーが懐中電灯の光から外れたとき { PlayTone(light*10,100); // 音を出す OnFwd(OUT_A); // 左タイヤが正転 OnRev(OUT_C); // 右タイヤが後転 until(SENSOR_2 >= light); // センサーが懐中電灯の光を見るまで } else // センサーが懐中電灯の光を見たとき { PlayTone(light*5,100); // 音を出す OnFwd(OUT_A + OUT_C); // 前進する until(SENSOR_2 < light); // センサーが懐中電灯から外れるまで } } } **反省 [#u026a584] ・センサーがひとつだけなのでその分精度が低いのが欠点。 ・一つ目と似ているので音を付け足してみました。 #comment