[[2009a/A8/課題2右]]
*交差点を曲がるプログラム [#na97d699]
-担当 西口

 #define THRESHOLD 44    //黒と白の境目の光量
 int a;
 #define L 44
 #define turn_right OnFwd(OUT_A+OUT_C);Wait(40);OnFwd(OUT_A);OnRev(OUT_C); //右に曲がるプログラム
                    Wait(85);OnFwd(OUT_A+OUT_C);Wait(30);
 #define turn_left OnFwd(OUT_A+OUT_C);Wait(40);OnFwd(OUT_C);OnRev(OUT_A); //左に曲がるプログラム
                   Wait(90);OnFwd(OUT_A+OUT_C);Wait(30);
 #define line_trace if (SENSOR_1>L){                     //ラインをトレースする
                    if(SENSOR_3>L){OnFwd(OUT_A+OUT_C);}
                    else{OnFwd(OUT_A);OnRev(OUT_C);}
                    }
                    else{
                    if(SENSOR_3>L){OnRev(OUT_A);OnFwd(OUT_C);}
                    }                   
 int a;   //変数aを定義
 task main ()
 {
 a=0;      //aで曲がった回数をカウント
 a=0;
 SetSensor(SENSOR_1,SENSOR_LIGHT);
 SetSensor(SENSOR_2,SENSOR_TOUCH);
 SetSensor(SENSOR_3,SENSOR_LIGHT);   

 while (a<19){   //一周するのに6回曲がるので6×3=18回試行するようにした。                  
 SetSensor(SENSOR_3,SENSOR_LIGHT);
 
  if((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD))//光センサーが両方黒のとき
  {
  if((a==0)||(a==2)||(a==4)||(a==6)||(a==8)|| //偶数回曲がっているとき
 (a==10)||(a==12)||(a==14)||(a==16)||(a==18)) 
 {
 Off(OUT_A+OUT_C);     //左に曲がる
 Wait(100);
 OnFwd(OUT_A+OUT_C);      
 Wait(40);        
 OnFwd(OUT_A);
 OnRev(OUT_C);
 Wait(85);
 OnFwd(OUT_A+OUT_C); 
 Wait(30);
 while (a<19) {
 if((SENSOR_1<L)&&(SENSOR_3<L)){     //光センサーがどちらも黒
 if((a==0)||(a==2)||(a==4)||(a==6)||(a==8)||(a==10)||(a==12)||(a==14)||(a==16)||(a==18))  //偶数回のとき
 {turn_right;}
 else     //奇数回のとき
 {turn_left;}
 a=a+1;
 }
 else{                  //奇数回曲がっているときに
 Off(OUT_A+OUT_C);     //右に曲がる
 Wait(100);
 OnFwd(OUT_A+OUT_C);
 Wait(40);
 OnFwd(OUT_C);
 OnRev(OUT_A);
 Wait(90);
 OnFwd(OUT_A+OUT_C);
 Wait(30);
 
 }a=a+1;                  //曲がった回数を一回カウント
 line_trace
 }
 
 if (SENSOR_1>THRESHOLD){    //光センサー1が白
 if(SENSOR_3>THRESHOLD){     //光センサー3も白
 OnFwd(OUT_A+OUT_C);
 Off(OUT_A+OUT_C);
 }
 else{                       //光センサー3は黒
 OnFwd(OUT_A);
 OnRev(OUT_C);
 }
 }
 else{                       //光センサー1が黒
 if(SENSOR_3>THRESHOLD){     //光センサー3は白
 OnRev(OUT_A);
 OnFwd(OUT_C);
 }
 }
 Off(OUT_A+OUT_C);           //三周終えて止まる
 }
 }



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