[[2006a/C2/課題2右]]
#hr
CENTER:&size(30){線をゆくロボット};
#hr
*1度目の挑戦...OTZ [#hc6c559c]

ifの中にifを入れる事で、曲がる事ができるか挑戦してみたプログラム。

一度目のifで線の上に乗った事を感知して、二度目のifで線をおりた事を感知して進めるようにして、また、ぶつかった際にはそ
の場で回転し、線に乗れた事を感知したら少し回転するようにして再び線に乗るように考えた。 
 
**ifの中にifを入れたプログラム [#w1787f4d]
 	
 #define THRESHOLD 40   //
 
 task main ()
 {
    SetSensor(SENSOR_1, SENSOR_LIGHT);
    SetSensor(SENSOR_2, SENSOR_TOUCH);
    SetSensor(SENSOR_3, SENSOR_LIGHT);
 
    OnFwd(OUT_A+OUT_C);
    while (true) {
            if (SENSOR_1 < THRESHOLD){
            if (SENSOR_1 < THRESHOLD){  //右の光が線に乗ったとき右に曲がる
            Rev(OUT_A);
            if (SENSOR_1 > THRESHOLD){
            if (SENSOR_1 > THRESHOLD){  //降りたら再び進む
            Fwd(OUT_A);}
        }
        if (SENSOR_3 < THRESHOLD){
        if (SENSOR_3 < THRESHOLD){    //左の光が線に乗ったら左に曲がる
            Rev(OUT_C);
            if (SENSOR_3 > THRESHOLD){
            if (SENSOR_3 > THRESHOLD){  //降りたら再び進む
            Fwd(OUT_C);}
        }
            if(SENSOR_2 == 1)
            if(SENSOR_2 == 1)       //障害物にぶつかったら反転して後ろに進む
           {
            Rev(OUT_A);
            until(SENSOR_1 < THRESHOLD)
            Rev(OUT_A);
            Wait(30);
            Fwd(OUT_A);
           }
    }
  }
**結果 [#o06c7970]

失敗...OTZ
ifの中のifはどうやら働かないらしく、片方が回転して線からで
てもモーターが前回転せず、さらにもう片方のセンサーが反応す
るとバックし続けてしまった...
幸いな事は、ぶつかった際のプログラムはうまくいった事です

*二度目の挑戦... [#m154a74f]

上手くいったのですが、プログラムを見てもらえばわかると思
うんですが、ただ単に前のプログラムのifを別々にしただけ
です...それだけで上手くいくなんて、なんだかなぁ...OTL

**ネオプログラム [#x07f75fc]
	#define THRESHOLD 40 
 
 task main ()
 {SetSensor(SENSOR_1, SENSOR_LIGHT);
  SetSensor(SENSOR_2, SENSOR_TOUCH);
  SetSensor(SENSOR_3, SENSOR_LIGHT);
  OnFwd(OUT_A+OUT_C);
  while (true) 
    {      if(SENSOR_1 < THRESHOLD)
    {      if(SENSOR_1 < THRESHOLD) //線に乗ったら降りる
           {Rev(OUT_A);}
           if(SENSOR_1 > THRESHOLD)
           if(SENSOR_1 > THRESHOLD) //線から降りてたら進む
           {Fwd(OUT_A);}
           if(SENSOR_3 < THRESHOLD)
           if(SENSOR_3 < THRESHOLD) //線に乗ったら降りる
           {Rev(OUT_C);}
           if(SENSOR_3 > THRESHOLD)
           if(SENSOR_3 > THRESHOLD) //線から降りてたら進む
           {Fwd(OUT_C);}
           if(SENSOR_2 == 1)
           if(SENSOR_2 == 1)     //障害物にあたったら反転して進む
           {Rev(OUT_A);
            until(SENSOR_1 < THRESHOLD)
            Rev(OUT_A);
            Wait(30);
            Fwd(OUT_A);}
    }
  }

**コメント〜 [#hf3297b3]

よろしければコメントどうぞ〜
-もう少し条件を整理して、if 〜 else や論理積や論理和を活用しましょう。 -- [[松本(教員)]] &new{2006-07-11 (火) 14:29:45};

#comment

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