- 追加された行はこの色です。
- 削除された行はこの色です。
[[2005/A1]]
*光を追いかけるロボット [#ffbb569c]
//製作者 そるとと 高尾
//指導 harada
#define freq 10 //センサ測定頻度
#define kaiten 25 //一周に必要な測定回数
int hikari:
int koutai;
sub sagasu() //光源の方向を探すサブルーチン
{
SetSensor(SENSOR_1, SENSOR_LIGHT); //センサー1を光センサーと定義
int w; //変数w(測定頻度)を定義
w=freq; //測定頻度をwに代入
int bmax; //変数bmax(明るさの最大値)を定義
bmax=0; //bmaxを初期化
int cn; //変数cn(測定回数)を定義
int hikari; //変数hikari(光源がある測定回数)を定義
for (cn=1; cn<=kaiten; cn++) //cnを25まで増やす
{
OnFwd(OUT_A); OnRev(OUT_C); Wait(w);Off(OUT_A+OUT_C); //w/100秒間回転
if (bmax <= SENSOR_1 ) //前の場所より明るかったら↓
{
bmax = SENSOR_1; //明るさの最大値を更新
hikari=cn; //光源のあると思われる測定回数を記録
PlayTone(220,50); //明るさの最大値が更新された場合に『ド』を鳴らす
}
else{PlayTone(262,50); //明るさの最大値が更新されない場合に『ミ』を鳴らす
}
}
koutai=kaiten-hikari; //光源までの回転数を計算する
if(back <= kaiten/2 )
{
repeat(koutai) //光源の方向を向く
{
OnFwd(OUT_C); OnRev(OUT_A);
Wait(w);
Off(OUT_A+OUT_C);
Wait(60);
}
}
else
{
repeat(hikari)
{
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(w);
Off(OUT_A+OUT_C);
Wait(60);
}
}
}
sub zenshin(){OnFwd(OUT_A+OUT_C);Wait(200);Float(OUT_A+OUT_C);} //前進するサブルーチン
task main()
{
while(true)
{
sagasu();
zenshin();
}
}