此篇為一示範如何在 Processing 中透過 Arduino 達到與 Wii Nunchuck (雙節棍左手) 互動的範例。
當然,網路上已經有介紹 Wii Nunchuck 藉由 Wiichuck Adapter 傳值進入 Arduino [*]。
但 Arduino 始終只是一個微控制器,通常僅扮演電子零件與與軟體溝通的橋梁。因為大家都在想將什麼鬼和什麼鬼與 Arduino 結合 (例如 Max結合Arduino, Flash結合Arduino XD),以達到與電子零件互動進而製造電腦產生 (computer-generated) 之多媒體效果。在常用的多媒體工具或互動多媒體程式中,最為廣泛使用的大概脫離不了 Flash 與 Processing (當然還有 Max, VVVV, Virtools...etc),易上手、網路上範例多是他們的共通點,同時又支援 Webcam 的互動 (傳說中的老招)。扯遠了,選擇 Processing 來與 Arduino + Wii Nunchuck 溝通,好處就是容易開發 GUI 及製作互動回饋,且跨平台。
以下就來說明如何使用我們的 WiichuckProce55ing 範例。
Requirements:
1. Arduino Controller
2. WiiChuck Adpater (大約台幣130元)
3. 裝有 Arduino 與 Processing 的電腦. (廢話)
4. 先行安裝 processing-arduino firmata v2 [*] (把解壓縮後的 arudino 資料夾整個移至 [processing 安裝目錄]\libraries 裡) (eg. C:\processing-0144\libraries)
開始!
1. 將 Simple_Wiichuck_Firmata.pde 燒錄至 Arduino 的 Firmata:
下載處: Simple_Wiichuck_Firmata_by_dk.zip
(based on processing-arduino firmata v2 & todbot's WiiChuck)
2. 將下列程式碼複製至 Processing 中編譯:
/*
* Simple_WiiChuck_Firmata DEMO
*
* 2009 Tai-Wei Kan, http://dk01.cc/
*
*/
import processing.serial.*;
import cc.arduino.*;
Arduino arduino;
void setup() {
//println(Serial.list());
arduino = new Arduino(this, Arduino.list()[2], 115200);
}
void draw() {
print("accx: ");print(arduino.analogRead(0));
print("\taccy: ");print(arduino.analogRead(1));
print("\taccz: ");print(arduino.analogRead(2));
print("\tjoyx: ");print(arduino.analogRead(3));
print("\tjoyy: ");print(arduino.analogRead(4));
print("\tzbut: ");print(arduino.analogRead(5));
print("\tcbut: ");println(arduino.analogRead(6));
}
備註:
arduino.analogRead(0) // 三軸加速計的 X 軸值
arduino.analogRead(1) // 三軸加速計的 Y 軸值
arduino.analogRead(2) // 三軸加速計的 Z 軸值
arduino.analogRead(3) // 類比搖桿 X 軸值
arduino.analogRead(4) // 類比搖桿 Y 軸值
arduino.analogRead(5) // 是否按下 Z 按鈕, 1 為是, 0 為否
arduino.analogRead(6) // 是否按下 C 按鈕, 1 為是, 0 為否
以上變數皆為 int 型態,可直接拿來在 Processing 中使用。(當然,先宣告幾個變數來儲存這些值,會比較洽當)
//println(Serial.list());
當你不知道 Arduino 是透過電腦的哪個通訊埠時,這行的註解可以拿掉,再 RUN 程式一次,便可以在 Processing 下方 Message Box 看到所有的 Serial Port。
arduino = new Arduino(this, Arduino.list()[2], 115200);
經過上述步驟,請把這行的 Arduino.list()[?] 的 ? 改成你 Arduino 所在位置。
115200 則是指 Bud Rate,若有其他考量, Arduino 那邊也要一起改。(實際測試 115200 比較沒問題發生,猜測是跟 Firmata 有關)
以上,即可將數據使用於 Proce55ing 中囉!cheers!
3. 透過 Processing 得到 Wii Nunchuck 值延伸範例 (修改 Processing 的範例):
以 Wii Nunchuck 轉動地球: WiichuckProce55ing_TexturedSphere.zip
以下是筆者愛用國貨的 DEMO,用 Wii Nunchuck 操控 OpenGL 畫出的地球[1]三維物件。
(按下Z按鈕後,藉由旋轉 Wii Nunchuck 轉動地球 :-D)
[1] Textured Sphere (Processing Examples) , by Mike 'Flux' Chang (cleaned up by Aaron Koblin). Based on code by Toxi.