[[戻る>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]
・一回転して懐中電灯の光を探す。
・懐中電灯の光に向かって進む。
・懐中電灯のずれを修正しながら進む。
・懐中電灯の光を見失ったとき、その場で回転して探す。
-やはり、センサー二つだと精度が良いのでしょうか。沢山のプログラムお疲れさまです。 -- [[ゆん(TA)]] &new{2006-02-02 (木) 18:00:35};
#comment