在眾人的期盼之下,NXT 2.0 在2009年下半年上市了,其中最大的改變就是新款的顏色感應器,它取代了原有的光感應器,對於顏色的辨識效果更好,可以辨別黑、白、紅、藍、黃與綠六種顏色,另外也可以當做燈泡使用。請看下圖,顏色感應器有二個燈泡,其中右上角的燈泡可以發出紅、綠與藍色的光,左上角的則是接收資料。
圖 NXT 顏色感應器
由於 BricxCC 3.3.7.19 版未支援顏色感應器,所以我們需要從 BricxCC 官網上下載新的 test_release 版本。
顏色感應器除了可以辨別顏色外,還可以當作燈泡使用,所以相對可以使用的語法也比較豐富,讓我們一個個來看:
1. SetSensorColorFull( 輸入端 ); :
如果您要使用的是 顏色感應器的顏色辨識功能,就必須使用本指令,本指令會讓感應器的紅、藍、綠燈同時亮起,以助辨識顏色。另外,若是要讀取感應器的值,方法跟前面所介紹的 一樣,只要使用 Sensor() 指令即可,不同的顏色會回傳不同的值,請看 表:
回傳值 |
代表顏色 |
1 |
黑色 |
2 |
藍色 |
3 |
綠色 |
4 |
黃色 |
5 |
紅色 |
6 |
白色 |
利用上述的說明,我們可以寫一個程式來辨別顏色,並將讀取到的顏色代號(1~6)以相對應的字串來表示,最後再顯示在螢幕上。請看:
task main()
{
SetSensorColorFull(S2);
string cname;
int ColorValue;
while(true)
{
ClearScreen();
ColorValue = Sensor(S2);
switch(ColorValue)
{
case 1:
cname = "Black";
break;
case 2:
cname = "Blue";
break;
case 3:
cname = "Green";
break;
case 4:
cname = "Yellow";
break;
case 5:
cname = "Red";
break;
case 6:
cname = "White";
break;
default : cname = "Unknown";
}
TextOut(0, LCD_LINE4, cname);
Wait(100);
}
}
我們在的4行宣告了一個字串形態的變數 cname 來存取字串,像"Black"、"Blue"、"Green"……等,並在第5行宣告一個整數型態的變數 ColorValue 來存取顏色感應器的值。配合無窮迴圈 while(true) 與條件分岔 switch ,就可以在感應器讀取到顏色代碼後,把相對應的字串存入 cname 裡並顯示在螢幕上,第32行的 TextOut() 指令的功用即是將字串顯示在NXT螢幕上,之前有提過的 NumOut() 則是顯示數字,兩者不可混用。
若是要使用顏色感應器的燈泡功能,則需使用下列的指令:
2. SetSensorColorRed( 輸入端 ); : 開啟顏色感應器的紅色燈。
3. SetSensorColorBlue( 輸入端 ); : 開啟顏色感應器的藍色燈。
4. SetSensorColorGreen( 輸入端 ); : 開啟顏色感應器的綠色燈。
5. SetSensorColorNone( 輸入端 ); : 燈泡關閉。
我們可以把顏色感應器當作信號燈,讓顏色感應器依序發出紅、綠與藍色的光各三秒鐘,請看:
task main()
{
SetSensorColorRed(S2);
Wait(3000);
SetSensorColorGreen(S2);
Wait(3000);
SetSensorColorBlue(S2);
Wait(3000);
}
TIPS:我們也可以讓顏色感應器發揮跟光感應器一樣的功能,也就是發出紅光,並將接收到的直轉換成百分比0~100,要達到這樣的目的,只要更改感應器的模式就可以了。
以上內容摘錄自CAVE的書 機器人新視界 – NXC與NXT 第二版 近期內將上市,敬請期待!