- Home /
Arduino serial delegate help
So I have a script reading values using SerialPort from Arduino in Update, which I've heard is actually incorrect due to the frame lag it causes. One solution to reading data asynchronously that I've seen is to use a delegate for DataReceived, but I can't quite work it out and I can't find any good tutorials to explain it step by step. Could you guys please help me figure this out? I'll leave the code below. Also, the Unity version I'm using is 2018.4.12 (SerialPort apparently disappeared from the latest versions). Thanks in advance!
SerialPort myport = new SerialPort("COM4", 9600);
private string arduinoData;
private string[] sensorsText;
private int[] flexValues = new int[5];
private GameManager4 gameManager;
// Start is called before the first frame update
void Start()
{
myport.Open();
gameManager = GameObject.Find("GameManager").GetComponent<GameManager4>();
}
// Update is called once per frame
void Update()
{
if (myport.IsOpen)
{
ReadData();
//do stuff
}
}
private void ReadData()
{
arduinoData = myport.ReadLine();
myport.ReadTimeout = 25; //wrong approach apparently
sensorsText = arduinoData.Split(',');
for (int i = 0; i < 5; i++) //only need the first 5 values
{
try
{
flexValues[i] = int.Parse(sensorsText[i]);
}
catch(System.FormatException e)
{
break;
}
}
}
Answer by WhosUrDaddy · Feb 06, 2020 at 11:18 AM
I eventually solved this problem using threads
Thread t;
void Start()
{
myport.Open();
t = new Thread(ReadDataThread);
t.Start();
}
void Update()
{
if (myport.IsOpen)
{
//do stuff
}
}
void ReadDataThread()
{
while (myport.IsOpen)
{
arduinoData = myport.ReadLine();
}
}
//always stop thread
public void OnApplicationQuit()
{
t.Abort();
}
Your answer

Follow this Question
Related Questions
Send many ints from Unity To Arduino. 2 Answers
parse serial data from arduino 1 Answer
Arduino serial Read 0 Answers
Problems With Sending Data through Serial Port 1 Answer
Long delay sending data to Arduino via Serial Communication 0 Answers