*目次 [#b25d0539]
#contents

*最初のプログラム [#ofa238ac]
**課題:三角形に動くロボット [#ic250380]
 task main()
 {
    OnFwd(OUT_C);
    OnFwd(OUT_A);
    Wait(300);
    OnFwd(OUT_C);
    OnRev(OUT_A);
    Wait(88);
    OnFwd(OUT_C);
    OnFwd(OUT_A);
    Wait(300);
    OnFwd(OUT_C);
    OnRev(OUT_A);
    Wait(88);
    OnFwd(OUT_A);
    OnFwd(OUT_C);
    Wait(300);
    Off(OUT_A+OUT_C);
 }
 感想:これではちゃんとした三角形にならなかった。
      回転する長さを考慮する必要がある。

**課題:三角形に動くロボット(改) [#sb42391c]
 #define x 300
 #define y 88
 
 task main()
 {
     repeat(2){
       OnFwd(OUT_C);
       OnFwd(OUT_A);
       Wait(x);
       OnFwd(OUT_C);
       OnRev(OUT_A);
       Wait(y);  
       }
     OnFwd(OUT_A);
     OnFwd(OUT_C);
     Wait(x);
     Off(OUT_A+OUT_C);
 }
 感想:定義を使用。ちょっとだけ見やすくなったと思う。

*書道ロボット [#pf7fc2d4]
**課題:「左」を書く書道ロボット [#j7ad21aa]
 task main()
 {   
    OnRev(OUT_B);
    Wait(50);          
                        //ペンを下げる
    OnFwd(OUT_C);         
    OnFwd(OUT_A);
    Wait(75);
    Off(OUT_C+OUT_A);  
                        //1画目
    OnFwd(OUT_B);
    Wait(50);
    Off(OUT_B);       
                        //ペンを上げる
    OnRev(OUT_C);
    OnRev(OUT_A);
    Wait(120);         
    Off(OUT_C+OUT_A);
    OnFwd(OUT_A);
    OnRev(OUT_C);
    Wait(115);
    Off(OUT_C+OUT_A);   
    OnFwd(OUT_A);
    OnFwd(OUT_C);
    Wait(30);
    Off(OUT_C+OUT_A);   
                        //2画目へ移動 
    OnRev(OUT_B);
    Wait(50);           
                        //ペンを下げる
    OnFwd(OUT_A);
    OnFwd(OUT_C);
    Wait(90);
    Off(OUT_A+OUT_C);   
                        //2画目
    OnFwd(OUT_B);
    Wait(50);           
    Off(OUT_B);         
                        //ペンを上げる
    OnRev(OUT_C);
    OnRev(OUT_A);
    Wait(95);
    Off(OUT_C+OUT_A);
    OnFwd(OUT_C);
    OnRev(OUT_A);
    Wait(108);
    Off(OUT_C+OUT_A);   
    OnFwd(OUT_C);
    OnFwd(OUT_A);
    Wait(75);
    Off(OUT_C+OUT_A);   
                        //3画目へ移動
    OnRev(OUT_B);
    Wait(50);          
                        //ペンを下げる
    OnFwd(OUT_C);
    OnFwd(OUT_A);
    Wait(40);
    Off(OUT_C+OUT_A);   
                        //3画目
    OnFwd(OUT_B);
    Wait(50);
    Off(OUT_B);         
                        //ペンを上げる
    OnRev(OUT_C);
    OnRev(OUT_A);
    Wait(85);
    Off(OUT_C+OUT_A);
    OnRev(OUT_C);
    OnFwd(OUT_A);
    Wait(107);
    Off(OUT_C+OUT_A);
    OnFwd(OUT_A);
    OnFwd(OUT_C);
    Wait(61);
    Off(OUT_C+OUT_A);   
                        //4画目へ移動
    OnRev(OUT_B);
    Wait(50);           
                        //ペンを下げる 
    OnFwd(OUT_A);
    OnFwd(OUT_C);
    Wait(35);
    Off(OUT_C+OUT_A);   
                        //4画目
    OnFwd(OUT_B);
    Wait(50);
    Off(OUT_B);         
                        //ペンを上げる   
    OnRev(OUT_C);
    OnRev(OUT_A);
    Wait(65);
    Off(OUT_C+OUT_A); 
    OnFwd(OUT_C);
    OnRev(OUT_A);
    Wait(102);
    Off(OUT_C+OUT_A);
    OnFwd(OUT_A);
    OnFwd(OUT_C);
    Wait(40);
    Off(OUT_C+OUT_A);   
                        //5画目へ移動
    OnRev(OUT_B);
    Wait(50);           
                        //ペンを下げる
    OnFwd(OUT_A);
    OnFwd(OUT_C);
    Wait(60);
    Off(OUT_C+OUT_A);   
                        //5画目
    OnFwd(OUT_B);
    Wait(50);
    Off(OUT_B);         
                        //ペンを上げる
 }
 感想:1度はFloatを使おうとしたけど妥協。
     サブルーチンや変数、定数を使わなかったので、かなり長いプログラムに
     なってしまった。     
     紙に書いてみても、バランスの悪いものとなってしまった。

**課題「左」を書く書道ロボット(改) [#wb02f990]

*タッチセンサー [#qa6c36cc]
**課題:机の周りを沿って進むロボット~失敗編~ [#r625d3cb]
 task main()
    { 
        SetSensor(SENSOR_1,SENSOR_TOUCH);
        SetSensor(SENSOR_3,SENSOR_TOUCH);  
        while(true)
       {
        if (SENSOR_3 == 1 )
        {
            OnFwd(OUT_A+OUT_C);  
        }                       //センサー3が押されている間、直進
        if (SENSOR_3 == 0 )
        {
          while(true){
            OnFwd(OUT_A);
            OnRev(OUT_C);
            Wait(30);
            OnFwd(OUT_A+OUT_C);
            Wait(30);
         }                       //センサー3が離れると右へ
        if  ((SENSOR_1 == 1 )&&(SENSOR_3 == 0 ))
        {
            OnFwd(OUT_A);
            OnRev(OUT_C);
            Wait(90);  
        }                        //センサー1が押されると左へ
       }  
    }}
  感想:2つ目のifを繰り返してしまう。whileの使い方を間違ってるみたい。

**課題:机の周りを沿って進むロボット~成功編~ [#raa3e593]
 task main()
 { 
      SetSensor(SENSOR_1,SENSOR_TOUCH);
      SetSensor(SENSOR_3,SENSOR_TOUCH);
        while(true)
        { 
          if ( SENSOR_3 == 1 )
          {  
           OnFwd(OUT_A+OUT_C);
          }                     //センサー3が押されている間直進
          if(( SENSOR_3 == 0 )&&( SENSOR_1 == 0 )) 
          {
           OnFwd(OUT_A);
           Off(OUT_C);
          }                     //センサーが押されていないと右へ
          if ( SENSOR_1 == 1 )
          {
           OnFwd(OUT_C);
           OnRev(OUT_A);
           Wait(90);
          }                     //センサー1が押されると左へ
         }
 }
 感想:whileを使うと、シンプルなプログラムになったと思う。
      ロボットの形も変えた。今までで1番時間をかけた。

*光センサー [#y3481636]
**ライントレースするロボット~光センサー1個使用~ [#c6ba4b0e]
 #define T 40
 
 task main ()
 {
      SetSensor(SENSOR_2,SENSOR_LIGHT);
     
       while (true) {
        if (SENSOR_2 < T) {     //センサーが線の上にある条件             
            OnFwd(OUT_A);
            Off(OUT_C);
        } else {                //それ以外の条件
            Off(OUT_A);
            OnFwd(OUT_C);
        }
    }
 }
 感想:うまくライントレースしてくれた。モーターはタイヤ。

**ライントレースするロボット~光センサー2個使用(前後に設置)~ [#i482f782]
 #define T 40
 task main ()
 {
     SetSensor(SENSOR_1,SENSOR_LIGHT);
     SetSensor(SENSOR_3,SENSOR_LIGHT);
      while (true) {
       if ((SENSOR_1 < T) &&(SENSOR_3 < T)){ 
                              //前後のセンサーが線の上にある条件   
           OnFwd(OUT_A);
           OnFwd(OUT_C);
       } if (SENSOR_1 < T){   //前のセンサーのみ線の上にある条件                  
           OnFwd(OUT_A);
           Off(OUT_C);
       } if (SENSER_1 < T){   //後のセンサーのみ線の上にある条件
           Off(OUT_A);
           OnFwd(OUT_C);
   } 
 }
 }
 感想:うまくライントレースしなかった。
      両方のセンサーが線から離れないと曲がらないようにしたため、
      車体の長さの分、線からはみ出すまで進んだ。
      結果、ズルをしたり、線から離れるロボットとなった。

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