メンバー: 永田卓嗣、中澤幌
version 2
Last modified: Fri Feb 7 17:20:26 JST 2003
[必須] ロボットに鉛筆またはペンを取り付け、 A3 用紙の上に ★型を描かせなさい (練習問題 3.3)。
#define MOVE_TIME 100 #define TURN_TIME 238 task main() { repeat(4)// 4回繰り返す { OnFwd(OUT_A+OUT_C); Wait(MOVE_TIME); OnRev(OUT_C); Wait(TURN_TIME); } OnFwd(OUT_A+OUT_C); Wait(MOVE_TIME); Float(OUT_A+OUT_C); }
工夫した点:
ここでは、ペンの置く位置に苦労しました。はじめは、ロボットの前につけていたら星型の角に丸い線が出てしまいその線を無くすようにするのが大変でした。
[必須] 机の上で動き回るロボットを作成しなさい。 ただし方向変換は机の端に来たときに行うこと (練習問題 4.2)。
task main() { SetSensor(SENSOR_1, SENSOR_TOUCH); until(SENSOR_1==1);//センサーが触れているとき OnFwd(OUT_A+OUT_C); while(true){ until(SENSOR_1==0);//センサーが離れているとき OnRev(OUT_A+OUT_C); Wait(50); OnFwd(OUT_A); Wait(50); OnFwd(OUT_A+OUT_C); } }
工夫した点:
センサーの位置を工夫したところです。でも、それほど大変ではなかったです。
[必須] 前向きに光センサーを取り付けたロボットを作成し、 そのロボットがもっとも明るい方向 (例えば照らした懐中電灯の方向) を向くようにしなさい。 さらにそのロボットが、 懐中電灯の光を追いかけて進むようにプログラムを改良しなさい (練習問題 4.5.1, 4.5.2)
int light_max ; int time_max ; int time_end ; #define Sol 784 #define Do 523 task play_music() { PlayTone(Do,25); Wait(10); } task play_music1() { PlayTone(Sol,25); Wait(10); } task main() { SetSensor(SENSOR_1, SENSOR_LIGHT); light_max = 0; ClearTimer(1);//タイマーをゼロにする OnFwd(OUT_A); OnRev(OUT_C); repeat(5) //回転して最高の光の場所を探す { repeat(2) { repeat(6) { if(SENSOR_1>light_max) { start play_music ; light_max=SENSOR_1; time_max=Timer(1); Wait(10); } else { Wait(10); } } } } time_end=Timer(1); start play_music1 ; OnFwd(OUT_C); OnRev(OUT_A); Wait(time_end*10-time_max*10);// 1/100秒と1/10秒に気おつける start play_music1 ; OnFwd(OUT_A+OUT_C); while(true) //光の明るいところを探して、明るいところへ向かっていく { if(SENSOR_1=light_max-10); OnFwd(OUT_C+OUT_A); } } }
工夫した点:
このプログラミングに使ってある言語の意味を理解するのに苦労しました。Timer(1)など…。工夫した点は、ロボットが光の最大値を把握できるところ。
[必須] 明るいところでは、長調で、暗いところでは短調で、 曲を演奏するプログラムを作成しなさい (曲は何でもよい) (練習問題 5.2)。
#define Ra 443 #define Si 483 #define Do 523 #define Re 587 #define Mi 659 #define Fa 698 #define Sol 784 #define Raa 880 #define Sii 988 #define Doo 1047 #define DDo 554 #define RRe 622 #define MMi 699 #define FFa 740 #define SSol 831 #define RRaa 932 #define SSii 1011 #define DDoo 1109 task play_music() // 音楽を演奏するタスク ドレミの歌 { PlayTone(Do,15); Wait(20); PlayTone(Re, 5); Wait(10); PlayTone(Mi,15); Wait(20); PlayTone(Do,5); Wait(10); PlayTone(Mi,15); Wait(20); PlayTone(Do,15); Wait(20); PlayTone(Mi,15); Wait(20); Wait(30); PlayTone(Re,15); Wait(20); PlayTone(Mi,5); Wait(10); PlayTone(Fa,5); Wait(10); PlayTone(Fa,5); Wait(10); PlayTone(Mi,5); Wait(10); PlayTone(Re,5); Wait(10); PlayTone(Fa,15); Wait(10); Wait(30); PlayTone(Mi,15); Wait(20); PlayTone(Fa,5); Wait(10); PlayTone(Sol,15); Wait(20); PlayTone(Mi,5); Wait(10); PlayTone(Sol,5); Wait(10); PlayTone(Mi,5); Wait(10); PlayTone(Sol,15); Wait(20); Wait(30); PlayTone(Fa,15); Wait(20); PlayTone(Sol,5); Wait(10); PlayTone(Raa,5); Wait(10); PlayTone(Raa,5); Wait(10); PlayTone(Sol,5); Wait(10); PlayTone(Fa,5); Wait(10); PlayTone(Raa,15); Wait(20); Wait(30); PlayTone(Sol,25); Wait(30); PlayTone(Do,5); Wait(10); PlayTone(Re,5); Wait(10); PlayTone(Mi,5); Wait(10); PlayTone(Fa,5); Wait(10); PlayTone(Sol,5); Wait(10); PlayTone(Raa,25); Wait(30); Wait(30); PlayTone(Raa,25); Wait(30); PlayTone(Re,5); Wait(10); PlayTone(Mi,5); Wait(10); PlayTone(Fa,5); Wait(10); PlayTone(Sol,5); Wait(10); PlayTone(Raa,5); Wait(10); PlayTone(Sii,25); Wait(30); Wait(30); PlayTone(Sii,25); Wait(30); PlayTone(Mi,5); Wait(10); PlayTone(Fa,5); Wait(10); PlayTone(Sol,5); Wait(10); PlayTone(Raa,5); Wait(10); PlayTone(Sii,5); Wait(10); PlayTone(Doo,25); Wait(30); Wait(30); } task play_music1() // 音楽を演奏するタスク ドレミの歌 { PlayTone(DDo,15); Wait(20); PlayTone(RRe, 5); Wait(10); PlayTone(MMi,15); Wait(20); PlayTone(DDo,5); Wait(10); PlayTone(MMi,15); Wait(20); PlayTone(DDo,15); Wait(20); PlayTone(MMi,15); Wait(20); Wait(30); PlayTone(RRe,15); Wait(20); PlayTone(MMi,5); Wait(10); PlayTone(FFa,5); Wait(10); PlayTone(FFa,5); Wait(10); PlayTone(MMi,5); Wait(10); PlayTone(RRe,5); Wait(10); PlayTone(FFa,15); Wait(10); Wait(30); PlayTone(MMi,15); Wait(20); PlayTone(FFa,5); Wait(10); PlayTone(SSol,15); Wait(20); PlayTone(MMi,5); Wait(10); PlayTone(SSol,5); Wait(10); PlayTone(MMi,5); Wait(10); PlayTone(SSol,15); Wait(20); Wait(30); PlayTone(FFa,15); Wait(20); PlayTone(SSol,5); Wait(10); PlayTone(RRaa,5); Wait(10); PlayTone(RRaa,5); Wait(10); PlayTone(SSol,5); Wait(10); PlayTone(FFa,5); Wait(10); PlayTone(RRaa,15); Wait(20); Wait(30); PlayTone(SSol,25); Wait(30); PlayTone(DDo,5); Wait(10); PlayTone(RRe,5); Wait(10); PlayTone(MMi,5); Wait(10); PlayTone(FFa,5); Wait(10); PlayTone(SSol,5); Wait(10); PlayTone(RRaa,25); Wait(30); Wait(30); PlayTone(RRaa,25); Wait(30); PlayTone(RRe,5); Wait(10); PlayTone(MMi,5); Wait(10); PlayTone(FFa,5); Wait(10); PlayTone(SSol,5); Wait(10); PlayTone(RRaa,5); Wait(10); PlayTone(SSii,25); Wait(30); Wait(30); PlayTone(SSii,25); Wait(30); PlayTone(MMi,5); Wait(10); PlayTone(FFa,5); Wait(10); PlayTone(SSol,5); Wait(10); PlayTone(RRaa,5); Wait(10); PlayTone(SSii,5); Wait(10); PlayTone(DDoo,25); Wait(30); Wait(30); } task main() { ClearTimer(0); SetSensor(SENSOR_1, SENSOR_LIGHT); while(true) { if(SENSOR_1<50) { start play_music ; // 演奏を開始 OnFwd(OUT_A+OUT_B); // 前進 } else { start play_music1; // 演奏を開始 OnFwd(OUT_A+OUT_B); // 前進 } if(Timer(0)>2000) //while文から脱出 { break; } } stop play_music ; // 演奏を停止 Off(OUT_A+OUT_B); // 動きも停止 }
工夫した点:
懐かしいドレミの歌を作ってみました。
[自由課題] 黒い線に沿って速く走るロボットを作成せよ (例題の改良)。
#define THRESHOLD 40 // task main () { SetSensor(SENSOR_1, SENSOR_LIGHT); SetSensor(SENSOR_2, SENSOR_LIGHT); ClearTimer(0); // Timer(0) をリセット while ( Timer(0) <= 2000 ) { // タイマー0が2000以下の時に繰り返す if (SENSOR_1 < THRESHOLD) { // 黒線上にいるとき OnFwd(OUT_A); OnFwd(OUT_C); } else { // 黒線から外れたとき Off(OUT_A); OnFwd(OUT_C); }if (SENSOR_2< THRESHOLD) { // 黒線上にいるとき OnFwd(OUT_A); OnFwd(OUT_C); } else { // 黒線から外れたとき Off(OUT_C); OnFwd(OUT_A); } } }
工夫した点:
これは、ライトセンサーを二つ使ったライントレースです。右にも左にも曲がることが可能です。