2010年5月26日 星期三

使用NXC撰寫NXT程式---第四章 流程控制

使用NXC撰寫NXT程式---第四章 流程控制

一、迴圈
1. repeat(n) {...} //執行{ }中的程式碼n次

//讓機器人走一個正方形
#define _GO_STRAIGHT_TIME 3000
#define _TURN_TIME 700
#define _GO_STRAIGHT_POWER 80
#define _TURN_POWER 50

task main()
{
    repeat(4){

      OnFwd(OUT_BC,_GO_STRAIGHT_POWER);
      Wait(_GO_STRAIGHT_TIME);
      OnRev(OUT_C,_TURN_POWER);
      Wait(_TURN_TIME);

    }
    Off(OUT_BC);

}


2. while(條件) {...} //當條件成立時執行{ }中的程式碼

//讓機器人走一個正方形
#define _GO_STRAIGHT_TIME 3000
#define _TURN_TIME 700
#define _GO_STRAIGHT_POWER 80
#define _TURN_POWER 50

task main()
{
    int i=0;
    while(i < 4){
      OnFwd(OUT_BC,_GO_STRAIGHT_POWER);
      Wait(_GO_STRAIGHT_TIME);
      OnRev(OUT_C,_TURN_POWER);
      Wait(_TURN_TIME);
      i++;

    }
    Off(OUT_BC);

}



3. do {...} while(條件) ; //本迴圈至少會執行一次

4. for(初始設定;條件;每次迭代最後要執行的指令) {...}

//讓機器人走一個正方形
#define _GO_STRAIGHT_TIME 3000
#define _TURN_TIME 700
#define _GO_STRAIGHT_POWER 80
#define _TURN_POWER 50

task main()
{
    int i;
    for(i=0; i < 4; i++){
      OnFwd(OUT_BC,_GO_STRAIGHT_POWER);
      Wait(_GO_STRAIGHT_TIME);
      OnRev(OUT_C,_TURN_POWER);
      Wait(_TURN_TIME);

    }
    Off(OUT_BC);

}



二、條件判斷
1. if(條件){...} else {...}

//讓機器人隨意散步
task main()
{

    int run_time = 0; //宣告一個整數變數,名為run_time,其初值為0
    while (true){
      run_time = (3+ Random(6-3)); //隨機取 3~5
      NumOut(5,20,run_time,true);
      TextOut(5,10,"Go Straight!");
      OnFwd(OUT_BC,80); //設定B、C port 的馬達以80%的Power正轉。
      Wait(run_time*1000); //等待 run_time 秒
      if (run_time % 2 ==0){ //右轉
        NumOut(5,20,run_time,true);
        TextOut(5,10,"Turn Right!");
        OnRev(OUT_C,80); //設定C port 的馬達以80%的Power後退。
        Wait(run_time*1000); //等待 run_time 秒

      }
      else { //左轉
        NumOut(5,20,run_time,true);
        TextOut(5,10,"Turn Left!");
        OnRev(OUT_B,80); //設定B port 的馬達以80%的Power後退。
        Wait(run_time*1000); //等待 run_time 秒

      }

    } //end while

}


2.switch(條件){...}

switch(x)
{

    case 1:
      // 撰寫x==1 時要做的事...
      break; //跳出switch

    case 2:
    case 3:
      // 撰寫x==2或3時要做的事...
      break; //跳出switch

    default:
      // 撰寫當x不是1, 2, 3 時要做的事...
      break; //跳出switich

}
註:NXC的 switch 可以使用 string 型別來判斷喔!

沒有留言:

張貼留言