[[2006b/A1/課題3左]] #contents *センサー1個のプログラム [#s70e2974] #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個のプログラム改良版 [#p026a5f1] #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; //きらきら星スタート。 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); } } }