[[戻る>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*5); // 懐中電灯のある方向まで回る(修正しました) 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] ・センサーがひとつだけなのでその分精度が低いのが欠点。 ・一つ目と似ているので音を付け足してみました。 -光センサーを2つ使うとどのくらい精度が向上するでしょうか? -- [[松本(教員)]] &new{2005-12-10 (土) 19:42:31}; -最も明るい方向まで旋回するのは Wait(i_max); ではなくて Wait(i_max*5); かな? -- [[松本(教員)]] &new{2005-12-12 (月) 11:35:39}; #comment **&color(green){上の二つの動きの流れ}; [#wc7874ae] ・最初は一回転して懐中電灯の光をさがす。 ・懐中電灯の光に向かって動き出す。 ・懐中電灯の光を見失ったら、その場で回転して懐中電灯の光を探す。 ・これを繰り返す。 **センサーを二つ使った場合のプログラム [#td700f00] // 12月19日 // コンド // 前半は上の二つのプログラムとほぼ同様で、while以下を作りました while(true) { if((SENSOR_1 >= light) && (SENSOR_3 >= light)) // 両センサーが懐中電灯の光を見ているとき { OnFwd(OUT_A + OUT_C); // 両タイヤが正転 PlaySound(SOUND_FAST_UP); // ピロピロ〜と速く高くなる音を出す until((SENSOR_1 >= light) && (SENSOR_3 >= light)); // センサーが懐中電灯の光を見るまで } if((SENSOR_1 < light) && (SENSOR_3 >= light)) // 左センサーが懐中電灯の光から外れたとき { OnFwd(OUT_C); // 右タイヤが正転 OnRev(OUT_A); // 左タイヤが後転 PlaySound(SOUND_DOWN); // ピロピロ〜という低い音を出す until((SENSOR_1 >= light) && (SENSOR_3 >= light)); // センサーが懐中電灯の光を見るまで } if((SENSOR_1 >= light) && (SENSOR_3 < light)) // 右センサーが懐中電灯の光から外れたとき { OnFwd(OUT_A); // 左タイヤが正転 OnRev(OUT_C); // 右タイヤが後転 PlaySound(SOUND_UP); // ピロピロ〜という高い音を出す until((SENSOR_1 >= light) && (SENSOR_3 >= light)); // センサーが懐中電灯の光を見るまで } else // センサーが懐中電灯の光を見失ったとき { OnFwd(OUT_A); OnRev(OUT_C); // 回転する PlaySound(SOUND_LOW_BEEP); // ブーという低い音を出す until((SENSOR_1 >= light) && (SENSOR_3 >= light)); // センサーが懐中電灯の光を見つけるまで } } **&color(blue){動きの流れ}; [#hdfabc4c] ・一回転して懐中電灯の光を探す。 ・懐中電灯の光に向かって進む。 ・懐中電灯のずれを修正しながら進む。 ・懐中電灯の光を見失ったとき、その場で回転して探す。 #comment