#

前一陣子看學弟在玩wii,所以就想說拿wii的把手結合Tcl看看,我們玩了一個下午...結果產出了一個tclwii套件。tclwii套件可以讓你用1行的Tcl程式就把wii把手的狀態讀回來,當然讀回來的資訊經過分析就可以用來控制PC端的Tcl程式,例如:用按鈕或手勢來控制音樂播放、關機。這一篇文章的內容說明tclwii的編譯及使用方法,另外也show一下我們用來測試的程式 - 支援wii把手控制的CrowAMP。

E04.1 編譯tclwii套件

tclwii是一個可以讀取wii把手的套件,它的原理是透過libcwiimote來讀wii的把手,由於我們的測試平台是在Linux上,所以tclwii目前只能在Linux上運作。而編譯及執行tclwii需要下列相依的套件:

  • libcwiimote-0.4
  • libcwiimote-dev

如果你是用ubuntu或debian,請執行下面的命令,正常的情況libbluetooth相關的套件也會一起裝好。


apt-get update
apt-get install libcwiimote-dev

裝好以後,就可以開始編譯tclwii了。請先在下面的位置取得tclwii套件:

- 下載tclwii-1.0.zip

解壓縮後,請打開Makefile,並且修改綠色標示的內容。


CC = gcc
INCLUDES = -I/home/soft/tcl85/include  請把這個路徑指到放有tcl.h檔案的位置
LIBS = -L/home/soft/tcl85/lib   請把這個路徑指到放有libtkstub8.5.a檔案的位置

CFLAGS = -shared -DUSE_TCL_STUBS
LDFLAGS = -lcwiimote -lbluetooth -ltclstub8.5  如果你的Tcl不是8.5版的,這邊也要修改
OUTPUT = libtclwii-1.0.so
SOURCE = tclwii.c
all:
$(CC) -shared -o $(OUTPUT)  $(INCLUDES) $(LIBS) $(CFLAG)  $(SOURCE) $(LDFLAGS)

clean:
@rm -f *.o *~ *.so


然後打make編譯,編譯完成後在tclwii的目錄下會產生一個libtclwii-1.0.so。

E04.2 使用tclwii套件

tclwii只有提供一個命令,它的語法如下:

Wii read blueaddr

Wii read讀取硬體位置為blueaddr的wii把手,並把讀到的資訊以陣列的方式回傳。陣列的元素包含A,B,+,-,1,2,H,L,R,U,D,X,Y,Z。其中XYZ是重力值,其它的都是把手上的按鈕。使用範列如下:


package require tclwii

set blueaddr "00:24:1E:A7:C7:75"

while {1} {
 puts [Wii read $blueaddr]
}


這個程式會不斷的讀取硬體位置為blueaddr的wii把手,然後把讀到的資訊印出來。

若你不知道自己wii把手的硬體位置可以按把手的1,2打開通訊,然後使用下列的linux命令掃描硬體位置:


hcitool scan

我把wii把手運用在控制CrowAMP,執行起來像這樣:

圖 E04-1


在視窗的最下方多了一個輸入藍芽硬體位置的欄位,當連上wii把手後CrowAMP就可以用wii把手遠端遙控了 ^^ 。

2 個意見

米粒 | 2010年2月24日 晚上8:09

感觸良多啊~~~

dai | 2010年2月25日 凌晨1:17

你....曾被wiimote打過嗎? 不然何來感觸 呵呵

留下您的意見

Theme Design by devolux.org. Converted by Wordpress To Blogger for WP Blogger Themes. Sponsored by iBlogtoBlog
This template is brought to you by : allblogtools.com | Blogger Templates