[教學] NXT Color Sensor – 利用 NXC

在眾人的期盼之下,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 第二版 近期內將上市,敬請期待!

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *