在三十歲的今年,人生的轉"類"點,希望可以換個自己喜歡,制度完善的工作環境,於是去了某家大公司面試,結果難免不如自己的意,不過路還是要繼續鋪下去,所以今天來寫一個Unity3D + Arduino 傳值的簡單功能(不好意思閒話家常了)
好囉! 正題來了
Arduino感測器是運用 超音波 ,然而我設定超過150公分就會SerialWrite一個字母,我這傳"A"這個值給Unity,而下面簡易程式碼就是接收Arduino傳過來的值。
下圖Arduino端超音波感測器程式
解釋一下上面的功能(可能不用解釋 因為太簡單了)
好了到目前為止都OK,但是Unity不讓我用System.IO.Ports,找了很久找到了為何了 如下圖為錯誤訊息:
解法:
好囉! 正題來了
Arduino感測器是運用 超音波 ,然而我設定超過150公分就會SerialWrite一個字母,我這傳"A"這個值給Unity,而下面簡易程式碼就是接收Arduino傳過來的值。
下圖Arduino端超音波感測器程式
using System.IO.Ports;
public SerialPort sp = new SerialPort ("COM4", 9600);
public class StageControl : MonoBehaviour {
void Start () {
sp.Open ();
sp.ReadTimeout = 1;
}
void Update () {
if (sp.IsOpen) {
try{
if(sp.ReadLine() == "A" && startTrigger == false){
FromArduinoTrigger1();
}
}catch(System.Exception){
}
}
}
}
解釋一下上面的功能(可能不用解釋 因為太簡單了)
- 一定要import System.IO.Ports,這就是程式直接去讀取com port的一個API
- 宣告一個 類別為SerialPort的物件,物件名稱叫做sp,並且設定他開的com port為COM4,傳輸速率為9600
- 在應用程式一開始時將物件sp開啟open方法,並設定他的ReadTimeout數值為1
- 在Unity中的每偵都去偵測Comport是否有東西傳進來,所以用了判斷式,判斷sp的屬性IsOpen,運用了try catch 去執行是否有東西傳進來的下一步動作。
好了到目前為止都OK,但是Unity不讓我用System.IO.Ports,找了很久找到了為何了 如下圖為錯誤訊息:
解法:
在Unity中的File>Build Settings>Player Settings>Other Settings裡面的Optimization>Api Compability Level(他預設是".NET 2.0 SubSet")必須換成".NET 2.0"才可以用
好啦 大致上是這樣,加油好嗎!!!(早知道傷心總是難免的~你又何故一往情深~)
留言