- Home /
Long Lag Time when reading Arduino Data [serially] in Unity
Hello, I'm trying to control the main camera's rotation inside of Unity using an IMU.The quaternion describing the 3D rotation is being sent from a Teensy (Arduino compatible) microcontroller. Here's a sample of the output being sent to Unity from the Arduino IDE serial monitor:
QT 0.568585 0.583274 0.434884 -0.383899
QT 0.568373 0.583475 0.434860 -0.383935
QT 0.568278 0.583554 0.434772 -0.384054
QT 0.568279 0.583546 0.434695 -0.384152
I got the camera to follow the orientation of the IMU. However, there's a significant lag time that is making the whole thing practically useless. So, if there's anyone here who knows how to fix this problem, kindly help me fix this problem.
Here's my Camercontroller script:
using UnityEngine;
using System.Collections;
using System.IO.Ports;
using UnityEditor;
using System;
using System.Collections.Generic;
public class Cameracontroller : MonoBehaviour
{
const int baudrate = 115200;
// Specify Correct Port Name
const string portName = "\\\\.\\COM4";
SerialPort serialPort = new SerialPort(portName, baudrate);
Quaternion quaternion;
void Start()
{
serialPort.ReadTimeout = 100;
serialPort.Open();
if (!serialPort.IsOpen)
{
Debug.LogError("Couldn't open " + portName);
}
}
void Update()
{
quaternion = ParseQuaternionData();
transform.rotation = Quaternion.Inverse(quaternion);
}
Quaternion lastquaternion;
Quaternion ParseQuaternionData()
{
List<byte> buffer = new List<byte>();
for (int i = 0; i < 64; i++)
{
buffer.Add((byte)serialPort.ReadByte());
}
string te = System.Text.Encoding.UTF8.GetString(buffer.ToArray());
string[] lines = te.Split('\n');
if (lines.Length >= 2)
{
// Split line by spaces
string[] line = lines[lines.Length - 2].Split(' ');
// If the line starts with "QT", parse the Quaternion
if (line[0] == "QT")
{
lastquaternion = new Quaternion(float.Parse(line[2]),
float.Parse(line[3]),
-float.Parse(line[4]),
float.Parse(line[1]));
}
}
return lastquaternion;
}
}
Your answer
Follow this Question
Related Questions
Map some Values taken from Serial Port 0 Answers
Need Help Connecting Arduino to Unity 0 Answers
Serial Communication-Best Practise 1 Answer