- 追加された行はこの色です。
- 削除された行はこの色です。
[[2006b/A6/R Room/mission 3]]
#contents
*プログラム [#ff109757]
**製作者/TAKA [#qa88c98f]
とりあえず一気に作るのは難しいと感じたので、別々に作りました。
***旋回して、光を見つけてその方向に進む[#d269e04b]
#define TURN_TIME 300 // 一回転するときにかかる時間
task main () {
SetSensor (SENSOR_1,SENSOR_LIGHT); // センサー1を光センサーに
int light_max=0,time_max; // light_maxとtime_maxを定義
while(true) // trueのとき
{
ClearTimer(0); // タイマー0をクリアー
OnFwd(OUT_A); // Aのモーターを正回転
OnRev(OUT_C); // Cのモーターを負回転 → 車体の回転
while(FastTimer(0)<TURN_TIME) // 一回転の時間よりもFastTimer(0)の方が小さいとき
{
if(SENSOR_1>light_max) // もしセンサー1がlight_maxよりも大きかったら
{
light_max=SENSOR_1; // センサー1をlight_maxに設定
time_max=TURN_TIME-FastTimer(0)+10; // time_maxをこの時間に設定
}
}
Off(OUT_A+OUT_C); // モーターストップ
OnFwd(OUT_A+OUT_C); // 前進
}
}
**音楽を鳴らすプログラム [#z1b05577]
***音楽を鳴らすプログラム [#z1b05577]
-チューリップの歌(題名がわかりません)
#define Do 523 // 音の定義 ド
#define Re 587 // レ
#define Mi 659 // ミ
#define Fa 698 // ファ
#define So 784 // ソ
#define Ra 880 // ラ
#define Si 988 // シ
#define Doo 1047 // ド
#define Do 523 // 音の定義 ド
#define Re 587 // レ
#define Mi 659 // ミ
#define Fa 698 // ファ
#define So 784 // ソ
#define Ra 880 // ラ
#define Si 988 // シ
#define Doo 1047 // ド
task play_music()
{
while(true)
{
PlayTone(Do,25);Wait(30);
PlayTone(Do,25);Wait(30);
PlayTone(Re,25);Wait(30);
PlayTone(Mi,25);Wait(30);
PlayTone(Do,25);Wait(30);
PlayTone(Re,25);Wait(30);
PlayTone(Mi,25);Wait(30);
PlayTone(So,25);Wait(30);
PlayTone(Mi,25);Wait(30);
PlayTone(Re,25);Wait(30);
PlayTone(Do,25);Wait(30);
PlayTone(Re,25);Wait(30);
PlayTone(Mi,25);Wait(30);
PlayTone(Re,30);Wait(30);
PlayTone(Do,25);Wait(30);
PlayTone(Re,25);Wait(30);
PlayTone(Mi,25);Wait(30);
PlayTone(Do,25);Wait(30);
PlayTone(Re,25);Wait(30);
PlayTone(Mi,25);Wait(30);
PlayTone(So,25);Wait(30);
PlayTone(Mi,25);Wait(30);
PlayTone(Re,25);Wait(30);
PlayTone(Do,25);Wait(30);
PlayTone(Re,25);Wait(30);
PlayTone(Mi,25);Wait(30);
PlayTone(Do,30);Wait(30);
PlayTone(So,25);Wait(30);
PlayTone(So,25);Wait(30);
PlayTone(Mi,25);Wait(30);
PlayTone(So,25);Wait(30);
PlayTone(Ra,25);Wait(30);
PlayTone(Ra,25);Wait(30);
PlayTone(So,30);Wait(30);
PlayTone(Mi,25);Wait(30);
PlayTone(Mi,25);Wait(30);
PlayTone(Re,25);Wait(30);
PlayTone(Re,25);Wait(30);
PlayTone(Do,30);Wait(30);
}
}
***課題のプログラム [#p96dff2a]
#define turn_time 300 // 一回転にかかる時間
#define Do 523 // 音の定義
#define Re 587
#define Mi 659
#define Fa 698
#define So 784
#define Ra 880
#define Si 988
#define Doo 1047
task play_music_1()
{
while(true){
PlayTone(SOUND_CLICK); // 音を鳴らす
}
}
task play_music_2()
{
while(true) // 上に書いた曲を鳴らすプログラム
{
PlayTone(Do,25);Wait(30);
PlayTone(Re,25);Wait(30);
PlayTone(Mi,25);Wait(30);
PlayTone(Do,25);Wait(30);
PlayTone(Re,25);Wait(30);
PlayTone(Mi,25);Wait(30);
PlayTone(So,25);Wait(30);
PlayTone(Mi,25);Wait(30);
PlayTone(Re,25);Wait(30);
PlayTone(Do,25);Wait(30);
PlayTone(Re,25);Wait(30);
PlayTone(Mi,25);Wait(30);
PlayTone(Re,30);Wait(30);
PlayTone(Do,25);Wait(30);
PlayTone(Re,25);Wait(30);
PlayTone(Mi,25);Wait(30);
PlayTone(Do,25);Wait(30);
PlayTone(Re,25);Wait(30);
PlayTone(Mi,25);Wait(30);
PlayTone(So,25);Wait(30);
PlayTone(Mi,25);Wait(30);
PlayTone(Re,25);Wait(30);
PlayTone(Do,25);Wait(30);
PlayTone(Re,25);Wait(30);
PlayTone(Mi,25);Wait(30);
PlayTone(Do,30);Wait(30);
PlayTone(So,25);Wait(30);
PlayTone(So,25);Wait(30);
PlayTone(Mi,25);Wait(30);
PlayTone(So,25);Wait(30);
PlayTone(Ra,25);Wait(30);
PlayTone(Ra,25);Wait(30);
PlayTone(So,30);Wait(30);
PlayTone(Mi,25);Wait(30);
PlayTone(Mi,25);Wait(30);
PlayTone(Re,25);Wait(30);
PlayTone(Re,25);Wait(30);
PlayTone(Do,30);Wait(30);
}
}
task main()
{
SetSensor(SENSOR_2,SENSOR_LIGHT); // センサー2を光センサーと定義
int lght_max=0,time_max; // light_maxとtime_maxを設定
start play_music_2 // music_2を鳴らす
while(true)
{
ClearTimer(0); // タイマー0をクリアー
OnFwd(OUT_A); // Aのモーターを正回転
OnRev(OUT_C); // Cのモーターを負回転
while(FastTimer(0)<TURN_TIME); // TURN_TIMEがFastTimer(0)より大きくなったら
{
if(SENSOR_2>light_max) // もしセンサー2がlight_maxより大きくなったら
{
light_max=SENSOR_2; // light_maxをセンサー2の値にする
start play_music_1;Wait(30); // music_1を鳴らす
stop play_music_1 // music_1を止める
time_max=TURN_TIME-FastTimer(0)+10; // time_maxをこの値にする
}
}
Off(OUT_A+OUT_C); // ストップ
stop play_music_2; // music_2を止める
OnFwd(OUT_A+OUT_C);
if(SENSOR_2<light_max) // もしlight_maxがセンサー2の値より大きくなったら
{
Off(OUT_A+OUT_C); とまる
Wait(30);
while(true) // ※ここから下のプログラムは上のプログラムを繰り返すので説明省略
{
ClearTimer(0);
OnFwd(OUT_A);
OnRev(OUT_C);
while(FastTimer(0)<TURN_TIME);
{
if(SENSOR_2>light_max)
{
light_max=SENSOR_2;
start play_music_2;Wait(30);
stop play_music_1
time_max=TURN_TIME-FastTimer(0)+10;
}
}
Off(OUT_A+OUT_C);
stop play_music_2;
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(time_max);
Off(OUT_A+OUT_C);
OnFwd(OUT_A+OUT_C);
}
}
**製作者/またたび [#s6087bd4]
-TAKAのプログラムを参考に制作してみました。
#define TURN_TIME 300
#define Do 523
#define Re 587
#define Mi 659
#define So 784
#define Ra 880
task play_music() //チューリップの歌 (後で自分の作った曲と入れ替えます)
{
while(true){
PlayTone(Do,25);Wait(30);
PlayTone(Re,25);Wait(30);
PlayTone(Mi,30);Wait(40);
PlayTone(Do,25);Wait(30);
PlayTone(Re,25);Wait(30);
PlayTone(Mi,30);Wait(40);
PlayTone(So,25);Wait(30);
PlayTone(Mi,25);Wait(30);
PlayTone(Re,25);Wait(30);
PlayTone(Do,25);Wait(30);
PlayTone(Re,25);Wait(30);
PlayTone(Mi,25);Wait(30);
PlayTone(Re,30);Wait(40);
PlayTone(Do,25);Wait(30);
PlayTone(Re,25);Wait(30);
PlayTone(Mi,30);Wait(40);
PlayTone(Do,25);Wait(30);
PlayTone(Re,25);Wait(30);
PlayTone(Mi,30);Wait(40);
PlayTone(So,25);Wait(30);
PlayTone(Mi,25);Wait(30);
PlayTone(Re,25);Wait(30);
PlayTone(Do,25);Wait(30);
PlayTone(Re,25);Wait(30);
PlayTone(Mi,25);Wait(30);
PlayTone(Do,30);Wait(40);
PlayTone(So,25);Wait(30);
PlayTone(So,25);Wait(30);
PlayTone(Mi,25);Wait(30);
PlayTone(So,25);Wait(30);
PlayTone(Ra,25);Wait(30);
PlayTone(Ra,25);Wait(30);
PlayTone(So,30);Wait(40);
PlayTone(Mi,25);Wait(30);
PlayTone(Mi,25);Wait(30);
PlayTone(Re,25);Wait(30);
PlayTone(Re,25);Wait(30);
PlayTone(Do,30);Wait(50);
}
}
task main()
{
SetSensor(SENSOR_2,SENSOR_LIGHT); //センサ−2を光センサーと定義
int light_max,time_max; //光の最大値と旋回時間を求めるための変数を定義
while(true){ //以下、繰り返し
light_max=0; //光の閾値を初期化
ClearTimer(0); //タイマー(0)を初期化
OnFwd(OUT_A); //光を探す為に旋回
OnRev(OUT_C);
start play_music; //設定した音楽を流す
while(FastTimer(0) < light_max){
if(SENSOR_2 > light_max){ //最も明るい光を感知した場合
light_max=SENSOR_2; //光の最大閾値を変更
time_max=TURN_TIME-FastTimer(0)+10; //旋回時間を決定
}
}
Off(OUT_A+OUT_C); //動作を一時停止
Wait(10);
OnFwd(OUT_C); //光のあった場所まで逆回転旋回
OnRev(OUT_A);
Wait(time_max);
stop play_music; //音学を停止
Off(OUT_A+OUT_C); Wait(30); //ひと呼吸
while(true){
if(light_max < 60){ //もし、光の最大値が通常空間程度なら
break; //再び最大の光を探す
}
else if(SENSOR_2 < light_max-20){ //もし、光が暗くなったら(見失ったら)
break; //再び最大の光を探す
}
else{
OnFwd(OUT_A+OUT_C); //通常時は直進
}
}
} //繰り返し
}