[[2013b/Member]]

#define HP 7
#define LP 2
#define THRESHOLD 36//ライントレース用閾値
#define turn_right1 OnFwd(OUT_A);
#define go_forward OnRev(OUT_A);
#define TIME_TRACE1 3//トレースの1回の判断で待つ時間
#define TIME_TRACE2 500//「4」で本体を90度回転させる地点を指定する値
#define NB_COUNT 4//交差点識別用の値
#define STACK 11//

task play_music()
{
  PlayTone(740,28);Wait(5);
  PlayTone(587,28);Wait(5);
  PlayTone(440,28);Wait(5);
  PlayTone(587,28);Wait(5);
  PlayTone(659,28);Wait(5);
  PlayTone(880,61);Wait(5);
  PlayTone(440,28);Wait(5);
  PlayTone(659,28);Wait(5);
  PlayTone(740,28);Wait(5);
  PlayTone(659,28);Wait(5);
  PlayTone(440,28);Wait(5);
  PlayTone(587,80);
} 

task main()
{
  SetSensor(SENSOR_2,SENSOR_LIGHT);
  SetPower(OUT_A,HP);
  int nbk=0;
  int ncros=0;
//1.黒線に当たるまで前進
  OnRev(OUT_A);
  until (SENSOR_2<=THRESHOLD);
//2.左折しライントレース
  turn_right1;
  Wait(400);
  ClearTimer(0);
  while(FastTimer(0)<=1000){
   if(SENSOR_2<THRESHOLD){go_forward;}
    else{turn_right1;}
    Wait(TIME_TRACE1);
  }
//缶積み
  start play_music;
  SetPower(OUT_BC,2);
  OnFwd(OUT_B);Wait(68);Off(OUT_B);
  stop play_music;
  while(ncros<2){//1
    while(nbk<NB_COUNT){//2
      if(SENSOR_2<THRESHOLD){go_forward;nbk++;}
      else{turn_right1;nbk=0;}
    Wait(TIME_TRACE1);
    }//2
    Wait(50);
    turn_right1;Wait(NB_COUNT*TIME_TRACE1);
    nbk=0;
    ncros++;
    go_forward;Wait(60);
  }//1
  while(nbk<NB_COUNT){//1
   if(SENSOR_2<THRESHOLD){go_forward;nbk++;}
    else{turn_right1;nbk=0;}
    Wait(TIME_TRACE1);
  }//1
  turn_right1;Wait(350);
  go_forward;Wait(200);
  turn_right1;Wait(170);
  until(Message()==STACK);
  start play_music;
  OnFwd(OUT_C);Wait(1000);
  OnRev(OUT_B);Wait(68);Off(OUT_BC);
  stop play_music;
  turn_right1;Wait(350);Off(OUT_A);
  ClearMessage();
  repeat(2){
    until(Message()==STACK);
    OnFwd(OUT_B);Wait(68);Off(OUT_B);
    ClearMessage();
    until(Message()==STACK);
    OnFwd(OUT_C);Wait(1000);
    OnRev(OUT_B);Wait(68);Off(OUT_BC);
    turn_right1;Wait(350);Off(OUT_A);
    ClearMessage();
  }
  OnRev(OUT_A);
  Wait(170);
  go_forward;
  Wait(600);
  Off(OUT_A);
  }

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