[[2017a/Member]]

#define white 49
#define white_gray 48
#define gray 40
#define black_gray 38
#define black 35
 
#define go_forward OnFwd(OUT_AC);              //直進
#define turn_left0 Off(OUT_A);OnFwd(OUT_C);    //左折
#define turn_left1 OnRev(OUT_A);OnFwd(OUT_C);  //左旋回
#define turn_right0 OnFwd(OUT_A);Off(OUT_C);   //右折
#define turn_right1 OnFwd(OUT_A);OnRev(OUT_C); //右旋回
 
#define migigawa turn_right0;Wait(20);Off(OUT_A);turn_right1;Wait(60);Off(OUT_AC); //右側に移動
#define hidarigawa turn_left0;Wait(20);Off(OUT_C);turn_left1;Wait(60);Off(OUT_AC); //左側に移動
 
sub hajime()                       //Aからスタート
{
     OnFwd(OUT_AC);
     Wait(60);
     Off(OUT_AC);
}
 
sub owari()                        //最後の直線からAに入る
{
     OnFwd(OUT_AC);
     Wait(180);
     Off(OUT_AC);
     PlaySound(SOUND_DOWN);
}
 
sub line_go()                      //線の左側をトレースし走行
{
     SetSensor(SENSOR_2,SENSOR_LIGHT);
     ClearTimer(0);
     
     while(FastTimer(0)<20){
         if(SENSOR_2>=white){
             turn_right1;
             ClearTimer(0);
            }else if(SENSOR_2>white_gray){
                 turn_right0;
                 ClearTimer(0);
                }else if(SENSOR_2>gray){
                     go_forward;
                     ClearTimer(0);
                    }else if(SENSOR_2>black_gray){
                         turn_left0;
                         ClearTimer(0);
                        }else{
                             turn_left1;
                                }
      }
     Off(OUT_AC);
}
 
sub line_go2()                     //線の右側をトレースし走行
{
     SetSensor(SENSOR_2,SENSOR_LIGHT);
     ClearTimer(0);
     
     while(FastTimer(0)<20){
         if(SENSOR_2>=white){
             turn_left1;
             ClearTimer(0);
            }else if(SENSOR_2>white_gray){
                 turn_left0;
                 ClearTimer(0);
                }else if(SENSOR_2>gray){
                     go_forward;
                     ClearTimer(0);
                    }else if(SENSOR_2>black_gray){
                         turn_right0;
                         ClearTimer(0);
                        }else{
                             turn_right1;
                                }
      }
     Off(OUT_AC);
}
 
sub tyokusinn_sound()          //交差点で音を鳴らし直進する
{
     PlaySound(SOUND_UP);
     OnFwd(OUT_AC);
     Wait(40);
     Off(OUT_AC);
}
 
sub sasetu_sound()             //交差点で音を鳴らし左折する
{
     PlaySound(SOUND_UP);
     turn_left0;
     Wait(90);
     turn_left1;
     Wait(50);
     Off(OUT_AC);
}
 
sub ichijiteisi_tyokusinn()    //交差点で音を鳴らし一時停止し直進する
{
     PlaySound(SOUND_DOWN);
     Off(OUT_AC);
     Wait(100);
     Off(OUT_AC);
     OnFwd(OUT_AC);
     Wait(40);
     Off(OUT_AC);
}
 
sub ichijiteisi_sasetu()       //交差点で音を鳴らし一時停止し左折する
{
     PlaySound(SOUND_DOWN);
     Off(OUT_AC);
     Wait(100);
     Off(OUT_AC);
     turn_left0;
     Wait(90);
     turn_left1;
     Wait(40);
     Off(OUT_AC);
}
 
 
task main()
{
     hajime();                 //Aから出て線をトレースし始める
     line_go();
     sasetu_sound();           //Fで左折
     line_go();
     ichijiteisi_sasetu();     //Qで一時停止、左折
     line_go(); 
     tyokusinn_sound();        //Rで直進
     line_go();
     sasetu_sound();           //Sで左折
     line_go();
     sasetu_sound();           //Gで左折
     line_go();
     migigawa;
     line_go2();
     hidarigawa;
     line_go();
     sasetu_sound();           //Hで左折
     line_go();
     ichijiteisi_tyokusinn();  //T一回目、一時停止、直進
     line_go();
     ichijiteisi_tyokusinn();  //T二回目、一時停止、直進
     line_go();
     ichijiteisi_sasetu();     //Rで一時停止、左折
     line_go();
     tyokusinn_sound();        //Sで直進
     line_go();
     sasetu_sound();           //Pで左折
     line_go();
     ichijiteisi_sasetu();     //Eで一時停止、左折
     line_go();
     owari();                  //Aに入る
}

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