[[ロボティクス入門ゼミ]] *ライントレース2 [#z7016f24] task main () { SetSensor(SENSOR_1, SENSOR_LIGHT); SetSensor(SENSOR_3, SENSOR_LIGHT); SetSensor(SENSOR_2, SENSOR_TOUCH); while (true) { if (SENSOR_1 < THRESHOLD) // (1)黒線上に いるとき { OnFwd(OUT_A); Off(OUT_C); } if (SENSOR_3 < THRESHOLD) // (3)黒線上にいるとき { OnFwd(OUT_C); Off(OUT_A); } if (SENSOR_2==1 ) { OnFwd(OUT_A);OnRev(OUT_C);Wait(70); //タッチしたら180°反転する OnFwd(OUT_C);wWait(30); OnFwd(OUT_C);OnRev(OUT_A);Wait(70); OnFwd(OUT_A);Wait(200); OnFwd(OUT_C);OnRev(OUT_A);Wait(90); OnFwd(OUT_A); } } *ライントレース1 [#a5949867] task main () { SetSensor(SENSOR_1, SENSOR_LIGHT); SetSensor(SENSOR_3, SENSOR_LIGHT); SetSensor(SENSOR_2, SENSOR_TOUCH); while (true) { if (SENSOR_1 < THRESHOLD) // (1)黒線上にいるとき { OnFwd(OUT_A); Off(OUT_C); } if (SENSOR_3 < THRESHOLD) // (3)黒線上にいるとき { OnFwd(OUT_C); Off(OUT_A); } if (SENSOR_2==1 ) { OnFwd(OUT_A);OnRev(OUT_C);Wait(150); //タッチしたら180°反転する OnFwd(OUT_C); } } } *改良作品 [#xf6923c4] /* 黒い線をトレースするロボット のプログラム */ #define THRESHOLD 40 // 閾値 task main () { SetSensor(SENSOR_1, SENSOR_LIGHT); SetSensor(SENSOR_3, SENSOR_LIGHT); SetSensor(SENSOR_2,SENSOR_TOUCH); while (true) { if (SENSOR_1 < THRESHOLD) // (1)黒線上にいるとき { OnFwd(OUT_A); Off(OUT_C); } if (SENSOR_3 < THRESHOLD) // (3)黒線上にいるとき { OnFwd(OUT_C); Off(OUT_A); } } } *試作 [#q945510a] /* ?????????g??Å[?X???????{?b?g ???v???O???? */ #define THRESHOLD 40 // ???l task main () { SetSensor(SENSOR_2, SENSOR_LIGHT); SetSensor(SENSOR_1,SENSOR_TOUCH); SetSensor(SENSOR_3,SENSOR_TOUCH); OnFwd(OUT_A+OUT_C); if (SENSOR_2 < THRESHOLD) { // ???????…???????´ OnFwd(OUT_A); Off(OUT_C); } else { // ?????????O???Ω???´ Off(OUT_A); OnFwd(OUT_C); } if (SENSOR_1==1 ) { OnFwd(OUT_A);OnRev(OUT_C); Wait(150); OnFwd(OUT_C); } if (SENSOR_3==1 ) { OnFwd(OUT_C);OnRev(OUT_A); Wait(150); OnFwd(OUT_A); } } *6月2日 [#h252caf1] **タッチセンサーを使ったプログラム [#t8eefb15] task main() { SetSensor(SENSOR_1,SENSOR_TOUCH); SetSensor(SENSOR_3,SENSOR_TOUCH); while(true) { OnFwd(OUT_A+OUT_C); until ((SENSOR_1==1) || (SENSOR_3==1)); OnRev(OUT_A+OUT_C);Wait(50); OnFwd(OUT_A);Wait(150); OnFwd(OUT_C); } } **ifバージョン [#p777d05f] task main() { SetSensor(SENSOR_1,SENSOR_TOUCH); SetSensor(SENSOR_3,SENSOR_TOUCH); OnFwd(OUT_A+OUT_C); while(true) { if (SENSOR_1==1 ) { OnRev(OUT_A+OUT_C); Wait(50); OnFwd(OUT_A);OnRev(OUT_C); Wait(100); OnFwd(OUT_C); } if (SENSOR_3==1 ) { OnRev(OUT_A+OUT_C); Wait(50); OnFwd(OUT_C);OnRev(OUT_A); Wait(100); OnFwd(OUT_A); } } } *5月13日 [#icb17dc5] **課題1...書道ロボット...『水』 [#u21d8dc0] task main() task main() { OnFwd(OUT_A+OUT_C); Wait(200); OnFwd(OUT_C); OnRev(OUT_A); Wait(135); OnFwd(OUT_A+OUT_C); Wait(50); Off(OUT_A+OUT_C); OnFwd(OUT_B); Wait(5); Off(OUT_B); OnFwd(OUT_A+OUT_C); Wait(100); Off(OUT_A+OUT_C); OnFwd(OUT_C); OnRev(OUT_A); Wait(108); Off(OUT_A+OUT_C); OnRev(OUT_B); Wait(5); Off(OUT_B); OnFwd(OUT_A+OUT_C); Wait(50); OnFwd(OUT_A); OnRev(OUT_C); Wait(41); OnRev(OUT_A+OUT_C); Wait(100); Off(OUT_A+OUT_C); OnFwd(OUT_B); Wait(5); Off(OUT_B); OnFwd(OUT_C); OnRev(OUT_A); Wait(16); Off(OUT_A+OUT_C); OnFwd(OUT_A+OUT_C); Wait(170); OnFwd(OUT_C); OnRev(OUT_A); Wait(20); Off(OUT_A+OUT_C); OnRev(OUT_B); Wait(10); Off(OUT_B); OnRev(OUT_A+OUT_C); Wait(60); OnFwd(OUT_C); OnRev(OUT_A); Wait(40); OnFwd(OUT_A+OUT_C); Wait(120); Off(OUT_A+OUT_C); OnFwd(OUT_B); Wait(5); Off(OUT_B); } // 作成者: // 作成日:2006-5-23 #define back(t) OnFwd(OUT_C);Wait(t);Off(OUT_C); #define front(t) OnRev(OUT_C);Wait(t);Off(OUT_C); #define right(t) OnRev(OUT_B);Wait(t);Off(OUT_B); #define left(t) OnFwd(OUT_B);Wait(t);Off(OUT_B); #define up OnFwd(OUT_A);Wait(30);Off(OUT_A); #define down OnRev(OUT_A);Wait(30);Off(OUT_A); task main() { down(30);back(150); //1 OnRev(OUT_C);OnFwd(OUT_B);Wait(10);Off(OUT_C+OUT_B); up;left(20);front(115); down;right(30); OnFwd(OUT_C+OUT_B);Wait(30);Off(OUT_C+OUT_B); up;right(70); } *6//23 [#xc0ca91e] #define TURN_TIME 200 #define light(t) OnRev(OUT_A);OnFwd(OUT_C);Wait(t);Off(OUT_A+OUT_C); int light_max=(0); int time_max=(0); task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); ClearTimer(0); OnFwd(OUT_A);OnRev(OUT_C); while(FastTimer(0)<TURN_TIME); { if(SENSOR_1>light_max); { light_max=SENSOR_1; time_max=FastTimer(0); } light (200-time_max); OnRev(OUT_A+OUT_C);Wait(50);Off(OUT_A+OUT_C); } } else+右旋回 #define THRESHOLD 40 task main () { SetSensor(SENSOR_1, SENSOR_LIGHT); SetSensor(SENSOR_3, SENSOR_LIGHT); SetSensor(SENSOR_2, SENSOR_TOUCH); while (true) { if (SENSOR_1 < THRESHOLD) //黒線上にきたらAを回転 { OnFwd(OUT_A); Off(OUT_C); } else { OnFwd(OUT_C); Off(OUT_A); } if (SENSOR_3 < THRESHOLD) //黒線上にきたらCを回転 { OnFwd(OUT_C); Off(OUT_A); } else { OnFwd(OUT_A); Off(OUT_C); } if (SENSOR_2==1 ) //ぶつかったら右から避ける { OnFwd(OUT_A);OnRev(OUT_C);Wait(70); OnFwd(OUT_C);Wait(150); OnFwd(OUT_C);OnRev(OUT_A);Wait(70); OnFwd(OUT_A);Wait(300); OnFwd(OUT_C);OnRev(OUT_A);Wait(90); OnFwd(OUT_A); } } } else+半回転 #define THRESHOLD 40 task main () { SetSensor(SENSOR_1, SENSOR_LIGHT); SetSensor(SENSOR_3, SENSOR_LIGHT); SetSensor(SENSOR_2, SENSOR_TOUCH); while (true) { if (SENSOR_1 < THRESHOLD) //黒線上にきたらAを回転 { OnFwd(OUT_A); Off(OUT_C); } else { OnFwd(OUT_C); Off(OUT_A); } if (SENSOR_3 < THRESHOLD) //黒線上にきたらCを回転 { OnFwd(OUT_C); Off(OUT_A); } else { OnFwd(OUT_A); Off(OUT_C); } if (SENSOR_2==1 ) //ぶつかったら半回転 { OnFwd(OUT_A);OnRev(OUT_C);Wait(150); } } } else+右旋回 #define THRESHOLD 40 task main () { SetSensor(SENSOR_1, SENSOR_LIGHT); SetSensor(SENSOR_3, SENSOR_LIGHT); SetSensor(SENSOR_2, SENSOR_TOUCH); while (true) { if (SENSOR_1 < THRESHOLD) //黒線上にきたらAを回転 { OnFwd(OUT_A); Off(OUT_C); } else { OnFwd(OUT_C); Off(OUT_A); } if (SENSOR_3 < THRESHOLD) //黒線上にきたらCを回転 { OnFwd(OUT_C); Off(OUT_A); } else { OnFwd(OUT_A); Off(OUT_C); } if ((SENSOR_1 > THRESHOLD) && (SENSOR_3 > THRESHOLD)) { OnFwd(OUT_A);OnFwd(OUT_C); } if (SENSOR_2==1 ) //ぶつかったら半回転 { OnFwd(OUT_A);OnRev(OUT_C);Wait(150); } } } *7/7 [#nc9e91fc] **明るい方向へ・「第六の幸運をもたらす宿」 [#v72eebf6] #define C 523 #define D 587 #define E 659 #define F 698 #define G 784 #define A 440 #define B 494 task play_music(1) { while(true) { PlayTone(G,25);Wait(30); PlayTone(E,25);Wait(30); PlayTone(G,50);Wait(55); PlayTone(G,25);Wait(30); PlayTone(E,25);Wait(30); PlayTone(G,50);Wait(55); PlayTone(A,25);Wait(30); PlayTone(G,25);Wait(30); PlayTone(F,25);Wait(30); PlayTone(E,25);Wait(30); PlayTone(D,25);Wait(80); PlayTone(E,25);Wait(30); PlayTone(F,50);Wait(55); PlayTone(G,25);Wait(30); PlayTone(C,25);Wait(30); PlayTone(C,25);Wait(30); PlayTone(C,25);Wait(30); PlayTone(C,12);Wait(17); PlayTone(D,12);Wait(17); PlayTone(E,12);Wait(17); PlayTone(F,12);Wait(17); PlayTone(G,50);Wait(55); PlayTone(G,25);Wait(30); PlayTone(D,25);Wait(30); PlayTone(D,25);Wait(30); PlayTone(F,25);Wait(30); PlayTone(E,25);Wait(30); PlayTone(D,25);Wait(30); PlayTone(C,50);Wait(55); Wait(20); } } #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)); } } } task main() { SetSensor(SENSOR_1,SENSOR_TOUCH); SetPower(OUT_A,2); SetPower(OUT_C,2); SetPower(OUT_B,5); ClearTimer(0); OnFwd(OUT_A+OUT_C); while (true) { if(SENSOR_1==1) { Off(OUT_A+OUT_C);Wait(100); OnFwd(OUT_B); OnFwd(OUT_A+OUT_C);Wait(150); Off(OUT_A+OUT_C); OnRev(OUT_B);Wait(50); OnRev(OUT_A+OUT_C);Wait(100); Off(OUT_A+OUT_C+OUT_B);Wait(300); OnFwd(OUT_A+OUT_C);Wait(150); OnFwd(OUT_A+OUT_C); while(true) if(SENSOR_1==1) { Off(OUT_A+OUT_B); OnFwd(OUT_B);Wait(100); OnRev(OUT_A+OUT_C);Wait(150); OnRev(OUT_B);Wait(50); Off(OUT_A+OUT_C+OUT_B); } } } }