首先第一部份是『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)
講的真詳盡, 推一下囉!! if後面不小心加分號, 是一些朋友常犯的錯誤. 尤其是有 until 這個討厭鬼來搗亂(until後面要加分號.)
回覆刪除探奇要不要幫CAVE的改版貢獻一章啊? c c c
[版主回覆01/29/2010 20:51:19]其實瞭解until的意義就不會弄錯了!
在NXC_Guide.pdf有解釋
#define until(c) while(!(c))
所以通常後面直接加上分號,也就是不執行任何動作。
我只是為了自己做一個備忘錄,你的書不是已經改版了嗎?
嗯 加分號就是空迴圈的意思。可以參考文章: 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的這篇文章,謝謝提醒!