[Unity3D] Arduino for Unity控制Led燈亮滅

今天要來跟大家分享如何使用Unity(輸入)來控制Arduino(輸出),在這邊我們會使用到序列通訊(SerialPort)的指令,您可以把序列通訊的角色看成是翻譯,作用在於充當Arduino與Unity之間溝通的橋樑。當然,這一切都只有簡單的幾行程式就能夠做到了喔!(使用Arduino UNO、Untiy5.0)

準備材料:

  1. Arduino一塊
  2. 麵包板一塊
  3. Led一顆
  4. 色碼電阻:紅紅棕
  5. 跳線

Step1:將Led接在13號腳位,再接一個電阻。

Step2:在Arduino IDE編寫如下的程式碼並上傳至Arduino。

2

在Arduino使用序列通訊會用到的幾個指令

1.Serial.begin():設定鮑率

2.Serial.read():讀取值

3.Serial.print():寫值

程式的架構很簡單,分為二部份:1.讀值;2.Led亮暗。由於我們將Led做為輸出,所以要先設定pingMode(腳位,OUTPUT),接著當Untiy傳過來的值為1時,Led亮digitalWrite(腳位,HIGH);反之值為0時,Led暗digitalWrite(腳位,LOW)。

Step3:在Untiy的Asset下建立一個C#腳本,命名為write,編寫如下程式碼。

3

在Untiy中要與Arduino溝通,同樣要使用到序列通訊SerialPort的指令。

1.using System.IO.Ports:調用控制序列埠的類別。

2.SerialPort 變數 = new SerialPort(“COM8”,9600):設定連接埠與鮑率,請與Arduino實際連接情況一致。

3.變數.Open();變數.IsOpen:開啟序列埠連線,是否開啟。

4.變數.Read();變數.Write():讀值、寫值。

Step4:建立一個空物件,並將write腳本丟進物件。

Step5:設定。在file->Build Settings->Player Settings->Other Settings展開後往底下找到Api Compatibility Level,將.Net 2.0 Subs改為.Net 2.0。如此一來,在調用控制序列埠時才不會出錯。

1

Step6:執行。在Unity遊戲執行畫面中分別按下a、b,我們就可以看到Led的燈亮、燈滅囉!

8 thoughts on “[Unity3D] Arduino for Unity控制Led燈亮滅

  1. jaoop says:

    板大好,您的教學很受用!!
    想請教您有可以反過來由Arduino 送入訊號到PC去控制unity中小遊戲的方法嗎
    目前想處理的是如果手甩一下由Arduino接收訊號,傳入unity,遊戲中小人偶的model會跳躍的小遊戲
    unity的小遊戲寫好了不過Arduino 跟 unity 兩邊的接口不知道怎麼寫,不曉得板大可不可以指點迷津,謝謝!!

發佈留言

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