2006b/A1/課題3左
センサー1個のプログラム†
#define Turn_Time 360 //最初の旋回の時間。
#define Do 523 //音の定義。
#define Re 587
#define Mi 659
#define Fa 698
#define Sol 784
#define Ra 880
task play_music() //きらきら星
{
while(true)
{
PlayTone(Do,60); Wait(65);
PlayTone(Do,60); Wait(65);
PlayTone(Sol,60); Wait(65);
PlayTone(Sol,60); Wait(65);
PlayTone(Ra,60); Wait(65);
PlayTone(Ra,60); Wait(65);
PlayTone(Sol,120); Wait(125);
PlayTone(Fa,60); Wait(65);
PlayTone(Fa,60); Wait(65);
PlayTone(Mi,60); Wait(65);
PlayTone(Mi,60); Wait(65);
PlayTone(Re,60); Wait(65);
PlayTone(Re,60); Wait(65);
PlayTone(Do,120); Wait(125);
PlayTone(Sol,60); Wait(65);
PlayTone(Sol,60); Wait(65);
PlayTone(Fa,60); Wait(65);
PlayTone(Fa,60); Wait(65);
PlayTone(Mi,60); Wait(65);
PlayTone(Mi,60); Wait(65);
PlayTone(Re,120); Wait(125);
PlayTone(Sol,60); Wait(65);
PlayTone(Sol,60); Wait(65);
PlayTone(Fa,60); Wait(65);
PlayTone(Fa,60); Wait(65);
PlayTone(Mi,60); Wait(65);
PlayTone(Mi,60); Wait(65);
PlayTone(Re,120); Wait(125);
PlayTone(Do,60); Wait(65);
PlayTone(Do,60); Wait(65);
PlayTone(Sol,60); Wait(65);
PlayTone(Sol,60); Wait(65);
PlayTone(Ra,60); Wait(65);
PlayTone(Ra,60); Wait(65);
PlayTone(Sol,120); Wait(125);
PlayTone(Fa,60); Wait(65);
PlayTone(Fa,60); Wait(65);
PlayTone(Mi,60); Wait(65);
PlayTone(Mi,60); Wait(65);
PlayTone(Re,60); Wait(65);
PlayTone(Re,60); Wait(65);
PlayTone(Do,120); Wait(125);
Wait(100);
}
}
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT); //光センサーの定義。
SetSensor(SENSOR_2,SENSOR_LIGHT); //光センサーの定義。
int light_max=0; //変数(光の値)の定義
int time_max; //変数(回転時の時間)の定義
ClearTimer(0);
OnFwd(OUT_A); //ここで旋回。
OnRev(OUT_C);
start play_music; //回っている間にきらきら星。
while(FastTimer(0) < Turn_Time){ //この間に、光の最大値と、その時間をはかる。
if(SENSOR_1 > light_max){
light_max=SENSOR_1;
time_max=FastTimer(0);
}
}
stop play_music; //きらきら星ストップ。
OnFwd(OUT_C); //ここで回転して光の下へ。
OnRev(OUT_A);
Wait(Turn_Time-time_max);
while(true){ //光の最大値によって分岐し光についていく。
if(light_max>60){
if(SENSOR_1>light_max-20){
OnFwd(OUT_A+OUT_C);}
else{
OnFwd(OUT_A);
OnRev(OUT_C);}
}
if(45<=light_max<=60){
if(SENSOR_1>light_max-5){
OnFwd(OUT_A+OUT_C);}
else{
OnFwd(OUT_A);
OnRev(OUT_C);}
}
else{
if(SENSOR_1>light_max){
OnFwd(OUT_A+OUT_C);}
else{
OnFwd(OUT_A);
OnRev(OUT_C);}
}
}
}
センサー1個のプログラム改良版†
#define Turn_Time 360 //最初の旋回時間
#define Turn_Time2 180 //二回目以降の旋回時間
#define Do 523 //音の定義。
#define Re 587
#define Mi 659
#define Fa 698
#define Sol 784
#define Ra 880
task play_music() //きらきら星
{
while(true)
{
PlayTone(Do,60); Wait(65);
PlayTone(Do,60); Wait(65);
PlayTone(Sol,60); Wait(65);
PlayTone(Sol,60); Wait(65);
PlayTone(Ra,60); Wait(65);
PlayTone(Ra,60); Wait(65);
PlayTone(Sol,120); Wait(125);
PlayTone(Fa,60); Wait(65);
PlayTone(Fa,60); Wait(65);
PlayTone(Mi,60); Wait(65);
PlayTone(Mi,60); Wait(65);
PlayTone(Re,60); Wait(65);
PlayTone(Re,60); Wait(65);
PlayTone(Do,120); Wait(125);
PlayTone(Sol,60); Wait(65);
PlayTone(Sol,60); Wait(65);
PlayTone(Fa,60); Wait(65);
PlayTone(Fa,60); Wait(65);
PlayTone(Mi,60); Wait(65);
PlayTone(Mi,60); Wait(65);
PlayTone(Re,120); Wait(125);
PlayTone(Sol,60); Wait(65);
PlayTone(Sol,60); Wait(65);
PlayTone(Fa,60); Wait(65);
PlayTone(Fa,60); Wait(65);
PlayTone(Mi,60); Wait(65);
PlayTone(Mi,60); Wait(65);
PlayTone(Re,120); Wait(125);
PlayTone(Do,60); Wait(65);
PlayTone(Do,60); Wait(65);
PlayTone(Sol,60); Wait(65);
PlayTone(Sol,60); Wait(65);
PlayTone(Ra,60); Wait(65);
PlayTone(Ra,60); Wait(65);
PlayTone(Sol,120); Wait(125);
PlayTone(Fa,60); Wait(65);
PlayTone(Fa,60); Wait(65);
PlayTone(Mi,60); Wait(65);
PlayTone(Mi,60); Wait(65);
PlayTone(Re,60); Wait(65);
PlayTone(Re,60); Wait(65);
PlayTone(Do,120); Wait(125);
Wait(100);
}
}
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT); //光センサーの定義。
SetSensor(SENSOR_2,SENSOR_LIGHT); //光センサーの定義。
int light_max=0; //変数(光の値)の定義
int time_max; //変数(回転時の時間)の定義
ClearTimer(0);
OnFwd(OUT_A); //ここで旋回。
OnRev(OUT_C);
start play_music; //回っている間にきらきら星。
while(FastTimer(0) < Turn_Time){ //この間に、光の最大値と、その時間をはかる。
if(SENSOR_1 > light_max){
light_max=SENSOR_1;
time_max=FastTimer(0);
}
}
stop play_music; //きらきら星ストップ。
OnFwd(OUT_C); //ここで回転して光の下へ。
OnRev(OUT_A);
Wait(Turn_Time-time_max);
while(true){
if(SENSOR_1>=light_max){
OnFwd(OUT_A+OUT_C); //光センサーが最大値以上ならば前進。
}
else{ //光センサーが最大値よりも小さくなった場合
light_max=0; //光の最大値初期化
time_max=0; //タイマーの時間も初期化
OnFwd(OUT_A); //ここから回転し始める。
OnRev(OUT_C);
Wait(90);
ClearTimer(1); //タイマースタート。
OnFwd(OUT_C);
OnRev(OUT_A);
start play_music; //きらきら星スタート。
while(FastTimer(1)<Turn_Time2){
if(SENSOR_1 > light_max){ //光センサーの値が大きかったら
light_max=SENSOR_1; //光の最大値を入れ替える。
time_max=FastTimer(1); //時間も記録する。
}
}
stop play_music; //きらきら星ストップ。
OnFwd(OUT_A); //旋回して光の下へ。
OnRev(OUT_C);
Wait(Turn_Time2-time_max);
}
}
}