[[2006a/A1]] #contents *課題3:光を追いかけるロボット [#we03515a] 懐中電灯の光を追いかけて進むロボットを製作し、以下の中から2種類以上のプログラムを作成せよ。 +光源を見失った時には曲を演奏しながらぐるっと旋回して光源を探す +光源を見失った時には明るさに比例した周波数の音を出しながら旋回して光源を探す +光源を見失っていないときにはある曲を演奏し、見失った時には別の曲警を演奏しながら光源を探す +上記のいずれかに『光源に近づき過ぎると停止する』という機能を追加する ただし支給されているモータ、光センサ、タッチセンサはいくつ使ってもよい。 *ロボット [#n95dfc0e] 誰か写真をアップしてください。+コメント *プログラム [#p42eee5d] **xxxバージョン [#tbf01de1] #define left(t) OnRev(OUT_A);OnFwd(OUT_C);Wait(t);Off(OUT_A+OUT_C); #define front(j) OnFwd(OUT_A+OUT_C);Wait(j);Off(OUT_A+OUT_C); #define back(j) OnRev(OUT_A+OUT_C);Wait(j);Off(OUT_A+OUT_C); #define right(j) OnRev(OUT_C);OnFwd(OUT_A);Wait(j);Off(OUT_A+OUT_C); #define turntime 200 int lightmax=0; int timemax=0; task main() { while(true) { SetSensor(SENSOR_1,SENSOR_LIGHT); ClearTimer(0); OnRev(OUT_C);OnFwd(OUT_A); while(FastTimer(0) < turntime) { if(SENSOR_1 > lightmax) {lightmax=SENSOR_1; timemax=FastTimer(0);} } left(200 - timemax); front(100); } } **僕バージョン [#l6a7a070] 作成者/僕 作成日/7月12日 光源を見失っていないときにはある曲を演奏し、見失った時には別の曲警を演奏しながら光源を探す プログラム #define C 523 #define C# 554 #define D 587 #define D# 622 #define E 659 #define F 698 #define F# 740 #define G 784 #define G# 831 #define A 440 #define A# 446 #define B 494 task play_music(2) //音楽を演奏するタスク { while(true) { PlayTone(E,50);Wait(40); PlayTone(D,25);Wait(15); PlayTone(C,25);Wait(15); PlayTone(C,75);Wait(65); PlayTone(C,25);Wait(15); PlayTone(G,50);Wait(40); PlayTone(A,50);Wait(40); PlayTone(G,33);Wait(23); PlayTone(F,33);Wait(23); PlayTone(G,33);Wait(23); PlayTone(E,50);Wait(40); PlayTone(D,25);Wait(15); PlayTone(C,25);Wait(15); PlayTone(C,75);Wait(65); PlayTone(E,25);Wait(15); PlayTone(G,50);Wait(40); PlayTone(F,33);Wait(23); PlayTone(E,33);Wait(23); PlayTone(F,33);Wait(23); PlayTone(E,50);Wait(40); PlayTone(E,50);Wait(40); PlayTone(D,25);Wait(15); PlayTone(C,25);Wait(15); PlayTone(C,75);Wait(65); PlayTone(C,25);Wait(15); PlayTone(G,50);Wait(40); PlayTone(A,50);Wait(40); PlayTone(G,33);Wait(23); PlayTone(F,33);Wait(23); PlayTone(G,33);Wait(23); PlayTone(E,50);Wait(40); PlayTone(D,25);Wait(15); PlayTone(C,25);Wait(15); PlayTone(C,75);Wait(65); PlayTone(E,25);Wait(15); PlayTone(G,50);Wait(40); PlayTone(F,33);Wait(23); PlayTone(E,33);Wait(23); PlayTone(D,33);Wait(23); PlayTone(C,100);Wait(90); Wait(50); } } #define TURN_TIME 200 #define right(t) OnRev(OUT_A);OnFwd(OUT_C);Wait(t); #define left(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t); #define front OnFwd?(OUT_A+OUT_C); task main () { int light_max=0; int time_max=0; SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); light_max=SENSOR_1; //センサー1が最大 ClearTimer(0); //タイマーを0 OnFwd(OUT_A);OnRev(OUT_C); //光を探す左回転 while(time_max<TURN_TIME){ //タイマーは20秒以内 start play_music ; if(SENSOR_1>light_max) //もし1が最大なら { light_max=SENSOR_1;//最大値を更新 time_max=FastTimer(0); } left(200-time_max); //一周から時間を差し引い front; } while(true) { if((SENSOR_1>=light_max)&&(SENSOR_3>=light_max)) { front; } if((SENSOR_1<=light_max)&&(SENSOR_3>=light_max)) { OnRev(OUT_A);OnFwd(OUT_C); until((SENSOR_1>=light_max)&& (SENSOR_3>=light_max)); } if((SENSOR_1>=light_max)&&(SENSOR_3<=light_max)) { OnFwd(OUT_A);OnRev(OUT_C); until((SENSOR_1>=light_max)&& (SENSOR_3>=light_max)); } } } *工夫した点 [#i0075af7] *反省点 [#bc377d9c]