【发布时间】:2019-09-07 04:22:19
【问题描述】:
我正在使用 Android 的 SensoDuino (Official website) 应用程序使用蓝牙串行通信将加速度计、陀螺仪等传感数据发送到 PC 中的 Unity。我在 Unity 中使用以下代码来接收数据 -
using UnityEngine;
using System.Collections;
using System.IO.Ports;
using System;
public class COM : MonoBehaviour {
public SerialPort sp;
public float data;
void Start () {
sp = new SerialPort("COM3", 9600,Parity.None, 8, StopBits.One);
Debug.Log ("Connection started");
if (sp != null)
{
if (sp.IsOpen)
{
sp.Close();
Debug.Log ("Closing port, because it was already open!");
}
else
{
sp.Open(); // opens the connection
// sets the timeout value before reporting error
sp.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
Debug.Log("Port Opened!");
}
}
else
{
if (sp.IsOpen)
{
print("Port is already open");
}
else
{
print("Port == null");
}
}
Debug.Log ("Open Connection finished running");
}
void Update () {
data = float.Parse( sp.ReadTo ("\r") ) ;
print ("data = " + data);
}
private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort spl = (SerialPort)sender;
data = float.Parse( spl.ReadTo ("\r") ) ;
Debug.Log(data.ToString());
print ("data = " + data);
}
}
但我无法接收任何数据。 DataReceiveHandler 根本没有开火。我也尝试使用ReadLine(),但它冻结了 Unity。
SensoDuino 发送加速度计数据的格式是
1,104,0.54437256,-0.2632141,9.826126
1,105,0.56111145,-0.279953,9.8524475
1,106,0.54556274,-0.2632141,9.833298
1,107,0.5515442,-0.26081848,9.841675
1,108,0.5312042,-0.2644043,9.867996
这是一个连续的流,可能是使用 ReadLine() 时冻结的原因。
请帮我读取数据。
【问题讨论】:
标签: c# android unity3d bluetooth serial-port