[[2006a/C3/課題3左]]
 #define right SetPower(OUT_A,2);SetPower(OUT_C,1);OnFwd(OUT_C+OUT_A);//右に曲がりつつ進む
 #define left SetPower(OUT_C,2);SetPower(OUT_A,1);OnFwd(OUT_C+OUT_A); //左に曲がりつつ進む
 #define stoP Off(OUT_A+OUT_C);                                       //停止
 #define senkair  SetPower(OUT_C+OUT_A,3);OnRev(OUT_A);OnFwd(OUT_C);  //右旋回
 #define senkail SetPower(OUT_C+OUT_A,3);OnRev(OUT_C);OnFwd(OUT_A);   //左旋回
 #define TURN_TIME 400
 task main()
 { 
    SetSensor(SENSOR_1, SENSOR_LIGHT);
    SetSensor(SENSOR_3, SENSOR_LIGHT);
    int Llm=0,time_max=0;
    ClearTimer(0);//タイマーセット
    while(FastTimer(0)<TURN_TIME)//ライトセンサー1の
    {                            //光度の最大値を探す(最大値をLlmと定義する)
    senkair;                     //最大値を見つけたら
        if(SENSOR_1>Llm)         //旋回した分と少し戻って光源が
        {                        //ライトセンサー1と3の大体
        Llm=SENSOR_1;            //真ん中にくるようにする
        time_max=FastTimer(0);
        }
    stoP;
    }
    senkail;
    Wait(TURN_TIME+40-time_max);
    stoP;
    while(true)
    {
         if(SENSOR_3+SENSOR_1>Llm*2-60)//センサ1、3の光度がある数値(Llm×2−60)未満になったら
         {                             //光源を見失ったとして
         senkair;                      //光度に比例した音を鳴らし
         PlayTone(SENSOR_1*3,10);      //右旋回しながら光源を探す
         }
             while(SENSOR_3+SENSOR_1>Llm*2-60)//センサ1、3の光度がある数値(Llm×2−60)より上のとき
             {
                 if(SENSOR_1>SENSOR_3)//センサ1の光度のほうが大きいとき
                 {right;//左に曲がりつつ進む
                 }
                 else if(SENSOR_3>SENSOR_1)//センサ3の光度のほうが大きいとき
右に曲がりつつ進む
                 {left;
                 }
             }
     }
 }

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS