2010-01-29

備忘錄:NXC的『if』指令與讀取感應器數值的指令

最近有一些同好提出NXC程式的撰寫問題,探奇將重點記錄下來,作為自己的備忘錄。

首先第一部份是『if』命令:


根據NXC_Guide.pdf的範例,if敘述的使用方式如下:

if (x==1) y = 2;
if (x==1) y = 3; else y = 4;
if (x==1) { y = 1; z = 2; }

(下面是探奇的解釋,有錯請大家指教!

如果只有一行程式要執行

if (條件比較) 條件成立的執行程式;

或是這 樣:

如果有許多東西要執行


if (條件比較)
    {
         條件成立的執行程式1;
         條件成立的執行程式2;
                .......
    }

如果你將敘述打成

if (SensorUS(S4) < range);
  {
   Off(OUT_AC);
   OnRev(OUT_C, 100);
   Wait(800);
   Off(OUT_C);
  }

表示條件成立時,只執行if條件後面的一行程式,那就是『;』,相當於不論條件成立與否,都沒有執行任何特殊的命令,接著就繼續執行下面{}裡面的指令。

請刪除if後面的『;』,應該可以正常動作:

if (SensorUS(S4) < range)
  {
   Off(OUT_AC);
   OnRev(OUT_C, 100);
   Wait(800);
   Off(OUT_C);
  }


簡而言之,探奇認為遵守NXC的語法,才能正確執行程式。

if 指令盡量都用{}將所要執行的命令『包』起來,除了避免錯誤,也比較容易閱讀!


第二部份是感應器數值的讀取:


S3是NXC內定的一個常數,專門用在表示輸入端的編號。

要使用感應器數值請使用 Sensor(n),例如Sensor(S3)



SENSOR_3

但是超音波感應器是屬於數位感 應器,請使用SensorUS(S4)





2 則留言:

  1. 講的真詳盡, 推一下囉!! if後面不小心加分號, 是一些朋友常犯的錯誤. 尤其是有 until 這個討厭鬼來搗亂(until後面要加分號.)

    探奇要不要幫CAVE的改版貢獻一章啊? c c c
    [版主回覆01/29/2010 20:51:19]其實瞭解until的意義就不會弄錯了!

    在NXC_Guide.pdf有解釋

    #define until(c) while(!(c))

    所以通常後面直接加上分號,也就是不執行任何動作。

    我只是為了自己做一個備忘錄,你的書不是已經改版了嗎?

    回覆刪除
  2. CAVE Hsieh11:15 下午

    嗯 加分號就是空迴圈的意思。可以參考文章: http://tw.myblog.yahoo.com/lego-caveschool/article?mid=2132&prev=2148&next=2097&l=f&fid=18
    [版主回覆01/29/2010 23:25:48]啊!我都忘了有CAVE的這篇文章,謝謝提醒!

    回覆刪除

探奇歡迎大家留言討論!謝謝分享你的意見。