我正在使用Arduino在Unity中使用智能家居系统。我正在使用端口和网络将数据从pc发送到arduino和android。函数SerialPort.ReadLine()
使每个人都非常迟钝。它使应用程序以1 fps移动。
这是代码:
using UnityEngine;
using System;
using System.IO.Ports;
public class Motorase : MonoBehaviour {
public SerialPort sp;
bool deschis1, deschis2, deschis3, deschis4;
public int temp, umid, gazv;
// Use this for initialization
void Start () {
deschis1 = false;
deschis2 = false;
deschis3 = false;
deschis4 = false;
foreach (string port in SerialPort.GetPortNames())
sp = new SerialPort(port, 9600);
if(!sp.IsOpen)
sp.Open();
sp.DtrEnable = true; // Data-terminal-ready
sp.RtsEnable = true; // Request-to-send
}
void Update()
{
sp.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
}
void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
Debug.Log("Da");
temp = Convert.ToInt32(sp.ReadLine());
umid = Convert.ToInt32(sp.ReadLine());
gazv = Convert.ToInt32(sp.ReadLine());
int apro = Convert.ToInt32(sp.ReadLine());
}
它出了什么问题?为什么函数DataReceivedHandler
没有被调用?
答案 0 :(得分:1)
您应该只在更新()期间注册一次事件处理程序,而不是多次。每帧调用一次,通常每秒30次。
速度慢的原因是,现在每帧有多次调用要从串口读取而不是只读一次,因此帧速率较低。
如果要使用硬件协议,则使用异步读取而不是阻止读取。阻止读取有点失败的目的。异步读取也适用于帧速率。