2006a/C2/課題3左


光源を見失った時には曲を演奏しながらぐるっと旋回して光源を探すプログラム

カウンタ772
ロボティクス入門ゼミ
2006a/C2/課題3左に戻る

プログラム内容

#define timer 200
//music nomber
#define Do 523
#define Re 587
#define Mi 659
#define Fa 698
#define So 784
#define Ra 880
#define Si 988
#define Do2 1047

int touch;

task music(){
    while(1){     //曲目:ねこふんじゃった
        Wait(20);
        PlayTone(Ra,5); Wait(10);
        PlayTone(So,5); Wait(10);
        PlayTone(Do,15); Wait(20);
        PlayTone(Do2,5); Wait(20);
        PlayTone(Do2,5); Wait(20);

        PlayTone(Ra,5); Wait(10);
        PlayTone(So,5); Wait(10);
        PlayTone(Do,15); Wait(15);
        PlayTone(Do2,5); Wait(20);
        PlayTone(Do2,5); Wait(20);

        PlayTone(Ra,5); Wait(10);
        PlayTone(So,5); Wait(10);
        PlayTone(Do,15); Wait(20);
        PlayTone(Do2,15); Wait(20);
        PlayTone(So,15); Wait(20);
        PlayTone(Do2,15); Wait(20);
        PlayTone(Ra,15); Wait(20);
        PlayTone(Si,5); Wait(20);
        PlayTone(Si,5); Wait(20);

        PlayTone(Ra,5); Wait(10);
        PlayTone(So,5); Wait(10);
        PlayTone(Re,15); Wait(20);
        PlayTone(Si,5); Wait(20);
        PlayTone(Si,5); Wait(20);

        PlayTone(Ra,5); Wait(10);
        PlayTone(So,5); Wait(10);
        PlayTone(Re,15); Wait(20);
        PlayTone(Si,5); Wait(20);
        PlayTone(Si,5); Wait(20);

        PlayTone(Ra,5); Wait(10);
        PlayTone(So,5); Wait(10);
        PlayTone(Re,15); Wait(20);
        PlayTone(Si,15); Wait(20);
        PlayTone(Ra,15); Wait(20);
        PlayTone(Si,15); Wait(20);
        PlayTone(Do2,5); Wait(20);
        PlayTone(Do2,5); Wait(20);
        PlayTone(Do2,5); Wait(20);
    }
}

task main(){
    SetSensor(SENSOR_1,SENSOR_LIGHT);     //センサー1を光センサーと設定
    SetSensor(SENSOR_3,SENSOR_LIGHT);     //センサー3を光センサーと設定
    touch = (SENSOR_1 + SENSOR_3) * 3 / 5;     //閾値をセンサー1と3の3/5の値に設定
    while(1){     //無限ループ
        if((SENSOR_1 < touch) && (SENSOR_3 < touch)){     //センサー1と3が閾値より低い場合
        if(SENSOR_1 > SENSOR_3){     //センサー3より1が高い場合
                trun_r();     //サブルーチンtrun_rへ移動
            }else if(SENSOR_1 < SENSOR_3){     //センサー1が3より高い場合
                trun_l();     //サブルーチンtrun_lへ移動
            }
        }else{     //両センサーが閾値より低い場合以外
            stop music;     //音楽停止
            straight();     //サブルーチンstraightへ移動
        }
    }
}

void trun_r(void){     //右旋回
    start music;     //音楽再生
    OnFwd(OUT_C);     //モーターCを正転
    OnRev(OUT_A);     //モーターAを逆転
    until((SENSOR_1 >= touch) || (SENSOR_3 >= touch));     //センサーの一方がライトに反応するまで足止め
}

void trun_l(void){     //左旋回
    start music;     //音楽再生
    OnFwd(OUT_A);     //モーターAを正転
    OnRev(OUT_C);     //モーターCを逆転
    until((SENSOR_1 >= touch) || (SENSOR_3 >= touch));     //センサーの一方がライトに反応するまで足止め
}

void straight(void){     //前進運動
    if((SENSOR_1 >= touch) && (SENSOR_3 >= touch)){     //両センサーがライトに反応している場合
        OnFwd(OUT_A+OUT_C);     //両モーター正転
    }else if((SENSOR_1 >= touch) && (SENSOR_3 < touch)){     //センサー1のみがライトに反応している場合
        OnFwd(OUT_C);
        OnRev(OUT_A);
    }else if((SENSOR_1 < touch) && (SENSOR_3 >= touch)){     //センサー3のみがライトに反応している場合
        OnFwd(OUT_A);
        OnRev(OUT_C);
    }
}

プログラム説明


コメント・感想・アドバイス



ロボティクス入門ゼミ
[[2006a/C2/課題3左に戻る>2006a/C2/課題3左]#g1294642]]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-07-11 (火) 20:03:08