ロボットはシンプルな物に仕上げました。前回の課題2を解決をした時のロボットのタッチセンサーを光センサーにうまく置き換えただけです。最初は、二つの光センサーを前方に付けただけでした。
しかし、光センサーを固定したままだと、光源を探すのに範囲が限られてしまうと思った。そこで、光センサーを固定するために上下から押さえていブロック板に光センサーをすべて固定するのではなく、固定箇所の一カ所をはめ込み固定し、光センサーを動かせるようにした。その結果、ロボットを起動させる前に光センサーの範囲を変えられるようになった。
光センサーの範囲をいろいろ変えてみた結果、このロボットでは、二つの光センサーを中央に向き合わせた形が一番調子がよかったです。
#define La 440 //ラの音 #define Si 494 //シの音 #define Do 523 //ドの音 #define Re 587 //レの音 #define Mi 659 //ミの音 #define Fa 740 //ファの音 #define So 784 //ソの音 #define La2 880 //ラの音 task play_music1() //summerを演奏する { PlayTone(La,10);Wait(15); PlayTone(Re,10);Wait(15); PlayTone(Mi,10);Wait(15); PlayTone(Fa,10);Wait(15); PlayTone(Mi,20);Wait(25); PlayTone(Re,10);Wait(15); PlayTone(Re,50);Wait(55); PlayTone(La,10);Wait(15); PlayTone(Re,10);Wait(15); PlayTone(Mi,10);Wait(15); PlayTone(Fa,10);Wait(15); PlayTone(Mi,20);Wait(25); PlayTone(Re,10);Wait(15); PlayTone(Mi,20);Wait(25); PlayTone(Fa,20);Wait(25); PlayTone(Fa,50);Wait(55); PlayTone(La,10);Wait(15); PlayTone(Re,10);Wait(15); PlayTone(Mi,10);Wait(15); PlayTone(Fa,10);Wait(15); PlayTone(Mi,20);Wait(25); PlayTone(Re,10);Wait(15); PlayTone(Re,50);Wait(55); PlayTone(La,10);Wait(15); PlayTone(Re,10);Wait(15); PlayTone(Mi,10);Wait(15); PlayTone(Fa,10);Wait(15); PlayTone(Mi,20);Wait(25); PlayTone(Re,10);Wait(15); PlayTone(Mi,20);Wait(25); PlayTone(La,20);Wait(25); PlayTone(Fa,50);Wait(55); PlayTone(Fa,20);Wait(25); PlayTone(So,20);Wait(25); PlayTone(La2,20);Wait(25); PlayTone(La2,10);Wait(15); PlayTone(La2,30);Wait(35); PlayTone(La2,20);Wait(25); PlayTone(La2,20);Wait(25); PlayTone(Fa,10);Wait(15); PlayTone(Re,30);Wait(35); PlayTone(Fa,10);Wait(15); PlayTone(So,10);Wait(15); PlayTone(La2,20);Wait(25); PlayTone(La2,10);Wait(15); PlayTone(La2,30);Wait(35); PlayTone(La2,20);Wait(25); PlayTone(La2,20);Wait(25); PlayTone(Fa,10);Wait(15); PlayTone(Re,30);Wait(35); PlayTone(Re,10);Wait(15); PlayTone(Mi,10);Wait(15); PlayTone(Fa,20);Wait(25); PlayTone(Fa,20);Wait(25); PlayTone(Fa,30);Wait(35); PlayTone(Fa,20);Wait(25); PlayTone(Fa,20);Wait(25); PlayTone(Si,20);Wait(25); PlayTone(Mi,3);Wait(8); PlayTone(Fa,3);Wait(8); PlayTone(Mi,4);Wait(9); PlayTone(Re,20);Wait(25); PlayTone(Mi,40);Wait(45); PlayTone(Mi,20);Wait(25); PlayTone(Mi,10);Wait(15); PlayTone(Mi,20);Wait(25); PlayTone(Do,60);Wait(65); } #define Fa 370 //ファ #define So 392 //ソ #define So1 415 //#ソ #define Ra 440 //ラ #define Si 494 //シ #define Do 554 //ド #define Re 587 //レ #define Me 659 //ミ #define Fa2 698 //ファ #define So2 784 //ソ #define Ra2 932 //ラ #define Ra21 831 //#ラ task main () { task play_music2() //TSUNAMIを演奏する { PlayTone(Ra,20);Wait(25); PlayTone(Re,20);Wait(25); PlayTone(Me,20);Wait(25); PlayTone(So,60);Wait(65); PlayTone(Fa2,20);Wait(25); PlayTone(Fa2,60);Wait(65); PlayTone(Fa2,20);Wait(25); PlayTone(Fa2,60);Wait(65); PlayTone(Mi,20);Wait(25); PlayTone(Mi,60);Wait(65); PlayTone(Mi,20);Wait(25); PlayTone(Mi,60);Wait(65); PlayTone(Re,20);Wait(25); PlayTone(Re,60);Wait(65); PlayTone(Re,20);Wait(25); PlayTone(Fa2,40);Wait(45); PlayTone(Mi,20);Wait(25); PlayTone(Fa2,10);Wait(15); PlayTone(Mi,10);Wait(15); PlayTone(Re,60);Wait(65); // PlayTone(Ra,20);Wait(25); PlayTone(Si,20);Wait(25); PlayTone(Do,20);Wait(25); PlayTone(Re,20);Wait(25); PlayTone(Re,20);Wait(25); PlayTone(Mi,40);Wait(45); PlayTone(Re,20);Wait(25); PlayTone(Mi,20);Wait(25); PlayTone(Fa2,40);Wait(45); PlayTone(Mi,20);Wait(25); PlayTone(Re,10);Wait(15); PlayTone(Re,50);Wait(55); PlayTone(Re,20);Wait(25); PlayTone(Si,30);Wait(35); PlayTone(Ra,10);Wait(15); PlayTone(So1,20);Wait(25); Wait(25); PlayTone(So,20);Wait(25); PlayTone(So,20);Wait(25); PlayTone(Ra,20);Wait(25); PlayTone(Si,20);Wait(25); PlayTone(Ra,40);Wait(45); PlayTone(Ra2,60);Wait(65); Wait(25); // PlayTone(Ra,20);Wait(25); PlayTone(Re,20);Wait(25); PlayTone(Me,20);Wait(25); PlayTone(So,60);Wait(65); PlayTone(Fa2,20);Wait(25); PlayTone(Fa2,60);Wait(65); PlayTone(Fa2,20);Wait(25); PlayTone(Fa2,60);Wait(65); PlayTone(Mi,20);Wait(25); PlayTone(Mi,60);Wait(65); PlayTone(Mi,20);Wait(25); PlayTone(Mi,60);Wait(65); PlayTone(Re,20);Wait(25); PlayTone(Re,60);Wait(65); PlayTone(Re,20);Wait(25); PlayTone(Fa2,40);Wait(45); PlayTone(Mi,20);Wait(25); PlayTone(Fa2,10);Wait(15); PlayTone(Mi,10);Wait(15); PlayTone(Re,60);Wait(65); // task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); #define Turn_Time 400 int light_max; int time_max; ClearTimer(0); start play_music2; //TSUNAMIを演奏する while(FastTimer(0)<Turn_Time) {OnFwd(OUT_A);OnRev(OUT_C); if(light_max<SENSOR_1) {light_max=SENSOR_1; ClearTimer(1); } } time_max=FastTimer(1); OnFwd(OUT_C); OnRev(OUT_A); Wait(time_max); start play_music1; //summerを演奏する while(true) {OnFwd(OUT_A+OUT_C); if(SENSOR_1<SENSOR_3) {Off(OUT_C); Wait(10); } if(SENSOR_1>SENSOR_3) {Off(OUT_A); Wait(10); } } }
特に音楽は苦労しました。
聞いただけでどの音がどれくらいの長さなのかなんてまったく分からなかったので、
下のように楽譜からノートに音符を音と拍数に書き換えて、そこからプログラムにしました。
summer ラ レ ミ ファ ミ レ レ 10 10 10 10 20 10 50
初めは光を追いかけるロボットなんて見当もつかなかったのですが、なんとかできてよかったです。