IMG_0178.JPG

 

此篇為一示範如何在 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)

IMG_0183.JPG

 

[1]  Textured Sphere (Processing Examples) , by Mike 'Flux' Chang (cleaned up by Aaron Koblin). Based on code by Toxi.

arrow
arrow
    全站熱搜

    DK 發表在 痞客邦 留言(3) 人氣()