目次
#contents
[[2017a/Member]]

#define white 49
#define white_gray 48
#define gray 40
#define black_gray 38
#define black 35
*課題について [#p32e005d]
*ロボット本体について [#we65960b]
*プログラミングについて [#lf910492]
**defineについて [#v9c94d32]
 #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 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に入る
}
 #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); //左側に移動
**サブルーチンについて [#s470c00b]
 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);
 }
  
**ライントレースのプログラム [#u8bf72e8]
 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に入る
 }
*まとめ [#g0d650f9]


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