[[2012a/Member]]
目次

#contents

*課題2  ライトレースロボット[#rc2a2179]
今回はこのようなコースを走る
&ref(DSC_0037.JPG);






**ページ作成者 [#ec9ba8bd]
Hato
*ロボット本体 [#waa0b872]
今回はただ走るだけのロボットなので、あまり工夫はしなかった。~
強いて言うなら、タイヤ間を狭くして小回りができるようにした。
&ref(DSC_0035.JPG);





青い部品がセンサー
&ref(DSC_0036.JPG);
*プログラム [#m4fd895e]
今回のポイントは~
1 交差点~
2 直角カーブ~
3 半周したらコースから出る~
である~
 
  #define THRESHOLD 45 //閾値~
  #define go_st OnFwd(OUT_AC);~
  #define go_le1 Off(OUT_A); OnFwd(OUT_C); OnRev(OUT_A); ~
  #define go_ri1 Off(OUT_C); OnFwd(OUT_A); OnRev(OUT_C);~
  #define go_le2 SetPower(OUT_A,2); SetPower(OUT_C,0);Off(OUT_A);  OnFwd(OUT_C);  OnRev(OUT_A);~
  #define go_ri2 SetPower(OUT_A,0); SetPower(OUT_C,2);Off(OUT_C); OnFwd(OUT_A);  OnRev(OUT_C);~
  #define go_le3 SetPower(OUT_A,4); SetPower(OUT_C,1);Off(OUT_A); OnFwd(OUT_C); OnRev(OUT_A); ~
  #define go_ri3 SetPower(OUT_A,2); SetPower(OUT_C,0);Off(OUT_C); OnFwd(OUT_A); OnRev(OUT_C);~
  #define t_overa 1400~
  #define t_overb 3000~
  #define t_overc 4000~
  #define t_overd 5000~
  #define t_overe 5500~
  #define t_overf 7000~
  #define t_overg 7890~
  
  
  task main() {

    ClearTimer(0);                                //タイマーリセット

    SetPower(OUT_A,0);
    SetPower(OUT_C,0);

    SetSensor(SENSOR_1, SENSOR_LIGHT);
    SetSensor(SENSOR_3, SENSOR_LIGHT);
    int cross = 0;                                            //両方黒になった回数をカウント
   while(true){                                        //百回きたら止める。
         if(SENSOR_1<THRESHOLD&&SENSOR_3<THRESHOLD){          //両方黒線の上にいるとき
            SetPower(OUT_A,0);
            SetPower(OUT_C,0);
            go_st;
            cross++;                                          //カウントする

         }else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)<=t_overa){       //3だけ黒線の上にあるとき
            PlaySound(SOUND_CLICK);
            go_st;
            Wait(5);
            SetPower(OUT_A,0);
            SetPower(OUT_C,4);
            go_ri1;
            
         }else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)<=t_overa){       //1だけ黒線の上にある時
            PlaySound(SOUND_CLICK);
            go_st
            Wait(5);
            SetPower(OUT_A,4);
            SetPower(OUT_C,0);
            go_le1;
            
            

          }else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overa && FastTimer(0)<=t_overb){       //直角を曲がるさい1だけ黒線の上にあるとき
            
            
            go_ri3;

          }else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overa && FastTimer(0)<=t_overb){       //直角を曲がるさい3だけ黒線の上にある時
            
            SetPower(OUT_A,0);
            SetPower(OUT_C,0);
            go_le3;

          

         }else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD &&  FastTimer(0)>t_overb && FastTimer(0)<=t_overc){       //3だけ黒線の上にあるとき
            PlaySound(SOUND_CLICK);
            go_st;
            Wait(5);
            SetPower(OUT_A,0);
            SetPower(OUT_C,4);
            go_ri1;
            
         }else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overb && FastTimer(0)<=t_overc){       //1だけ黒線の上にある時
            PlaySound(SOUND_CLICK);
            go_st
            Wait(5);
            SetPower(OUT_A,4);
            SetPower(OUT_C,0);
            go_le1;

   

          }else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overc && FastTimer(0)<=t_overd){       //1だけ黒線の上にあるとき
            
            SetPower(OUT_A,0);
            SetPower(OUT_C,0);
            go_ri2;

          }else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overc && FastTimer(0)<=t_overd){       //3だけ黒線の上にある時
            
            SetPower(OUT_A,0);
            SetPower(OUT_C,0);
            go_le2;

          }else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD &&  FastTimer(0)>t_overd && FastTimer(0)<=t_overe){       //3だけ黒線の上にあるとき
            PlaySound(SOUND_CLICK);
            go_st;
            Wait(5);
            SetPower(OUT_A,0);
            SetPower(OUT_C,4);
            go_ri1;
            
          }else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overd && FastTimer(0)<=t_overe){       //1だけ黒線の上にある時
            PlaySound(SOUND_CLICK);
            go_st
            Wait(5);
            SetPower(OUT_A,4);
            SetPower(OUT_C,0);
            go_le1;

         }else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD && FastTimer(0)>t_overe && FastTimer(0)<=t_overf){       //1だけ黒線の上にあるとき
            
            SetPower(OUT_A,0);
            SetPower(OUT_C,0);
            go_ri2;
                          
                    
         }else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overe && FastTimer(0)<=t_overf){       //3だけ黒線の上にある時
           
            SetPower(OUT_A,0);
            SetPower(OUT_C,0);
            go_le2;
                  
                          
                    
                                                 
         }else if(SENSOR_1>THRESHOLD && SENSOR_3<THRESHOLD &&  FastTimer(0)>t_overf){       //3だけ黒線の上にあるとき
            PlaySound(SOUND_CLICK);
            go_st;
            Wait(5);
            SetPower(OUT_A,0);
            SetPower(OUT_C,4);
            go_ri1;
              
          }else if(SENSOR_1<THRESHOLD && SENSOR_3>THRESHOLD && FastTimer(0)>t_overf){       //1だけ黒線の上にある時
            PlaySound(SOUND_CLICK);
            go_st
            Wait(5);
            SetPower(OUT_A,4);
            SetPower(OUT_C,0);
            go_le1;

         }else if(SENSOR_1>THRESHOLD && SENSOR_3>THRESHOLD){       //両方黒の外にあるとき
            SetPower(OUT_A,0);
            SetPower(OUT_C,0);
            go_st;
            }
     }

 }


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