[[2005/C1/宇佐美]]
#contents
**ロボット製作者 [#o8d603f8]
  池尻、宇佐美

*課題:机の周りを沿って進むロボット~成功編~ [#raa3e593]
**ロボットの写真 [#bb817723]
&ref(2005/C1/タッチセンサー/画像 023.jpg,成功); 
**プログラム [#wacb1394]
 task main()
 { 
      SetSensor(SENSOR_1,SENSOR_TOUCH);
      SetSensor(SENSOR_3,SENSOR_TOUCH);
                               //1と3をタッチセンサーと指定
        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 )
          {
           OnRev(OUT_A+OUT_C);
           Wait(30);
           OnFwd(OUT_C);
           OnRev(OUT_A);
           Wait(90);
          }                     //センサー1が押されると左へ
         }
 }
**ロボットについて [#ie90a3ae]
失敗編の反省を生かし(というか、出来なかったので変更)、今回のプログラムに。タッチセンサーを付ける位置が難しかった。センサー3が当たり続けて、しかもセンサー1が当たる角度が・・・。また、センサー1が反応して曲がるときに、センサー3の付いているでっぱりが取れないようにするのに苦戦した(本体から横に突き出すようにセンサー3を取り付けると、重さで安定しない)。これはセンサー1が反応すると、少しバックしてセンサーが曲り角の壁に突っ込んでいかないようにするというプログラムと前のロボットだと壁を曲がるときにセンサーに安定性がなくて、ポロっと取れたりしたので、黄色のアーム(?)を使用して丈夫にし、安定するようにすることで解消。ここに至るまでが長かった・・・。

**感想 [#l4c6d20a]
whileを使うと、シンプルなプログラムになったと思う。「ロボットを複雑にしてプログラムを簡単にするか、プログラムを複雑にしてロボットを簡単にするか」という先生の助言により、ロボットの形も変えた。今までで1番時間をかけた。色々なプログラムを試したけど、ちゃんと思った通りに動いてくれないものが多くて苦戦した。オプションとして羽根を付けたら、タッチセンサーと
相まって、ハトみたいな容姿になった。

*課題:机の周りを沿って進むロボット~失敗編~ [#r625d3cb]
**ロボットの写真 [#c5896d88]
&ref(2005/C1/タッチセンサー/画像 022.jpg,失敗); 
**プログラム [#bea16dba]
 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が押されると左へ
       }  
    }}
**感想 [#t0789a96]
2つ目のifを繰り返してしまう。whileの使い方を間違ってるみたい。
-while(true){} は無限ループなので、その部分が終ることはありません。ですので2つ目の if の中では while(true){} を使用してはいけません。 -- [[松本(教員)]] &new{2005-12-09 (金) 23:06:46};
-ありがとうございます。また時間があれば改良してみます。 -- [[宇佐美]] &new{2005-12-16 (金) 18:29:53};
-ロボットについて、をアップしました -- [[宇佐美]] &new{2006-02-09 (木) 03:17:39};

#comment

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS