前一陣子看學弟在玩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把手遠端遙控了 ^^ 。
按右上方的「#」號切換側邊欄