Skip to content
今天要來跟大家分享如何使用Unity(輸入)來控制Arduino(輸出),在這邊我們會使用到序列通訊(SerialPort)的指令,您可以把序列通訊的角色看成是翻譯,作用在於充當Arduino與Unity之間溝通的橋樑。當然,這一切都只有簡單的幾行程式就能夠做到了喔!(使用Arduino UNO、Untiy5.0)
準備材料:
- Arduino一塊
- 麵包板一塊
- Led一顆
- 色碼電阻:紅紅棕
- 跳線
Step1:將Led接在13號腳位,再接一個電阻。
Step2:在Arduino IDE編寫如下的程式碼並上傳至Arduino。
在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,編寫如下程式碼。
在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。如此一來,在調用控制序列埠時才不會出錯。
Step6:執行。在Unity遊戲執行畫面中分別按下a、b,我們就可以看到Led的燈亮、燈滅囉!
Post Views: 997
不知怎么就进来了,先看看
對岸應該是看得到的,歡迎逛逛喔
IOException: The port `COM8′ does not exist.
System.IO.Ports.WinSerialStream.ReportIOError (System.String optional_arg)
我試做結果,我有點問題,想請你們一下,上述是我哪裡做錯?
COM8 does not exist, 您的 COM port 跑掉啦,檢查一下 COM port 是多少吧?
板大好,您的教學很受用!!
想請教您有可以反過來由Arduino 送入訊號到PC去控制unity中小遊戲的方法嗎
目前想處理的是如果手甩一下由Arduino接收訊號,傳入unity,遊戲中小人偶的model會跳躍的小遊戲
unity的小遊戲寫好了不過Arduino 跟 unity 兩邊的接口不知道怎麼寫,不曉得板大可不可以指點迷津,謝謝!!
請參考這篇 http://bird18kimo.pixnet.net/blog/post/338936951-arduino-%E8%B7%9F-unity%E9%80%8F%E9%81%8Eusb%E4%BE%86%E6%BA%9D%E9%80%9A
您好! 我解決了 原來是按電腦鍵旁上的按鈕XD. 但想問ardunio版上為何亮燈的不是腳位13,而是TX呢?
恭喜!解決問題很有成就感對吧~ 因為 Arduino 在收發資料的時候,會藉由 TX / RX 來顯示傳輸進行中。TX: transmit, RX: receive