- Home /
Unity Arduino Communication Problem
Hi!
Im trying to connect arduino to unity using a seperate thread. The port seems to open, thread is starting but reading and writing the serialport is not working, the static variables from the attached script are always NULL. Also the arduino is not receiving anything.
What am i doing wrong? Thanks for any answers!
using UnityEngine; using System.Collections; using System.Collections.Generic; using System.IO.Ports; using System.Threading;
public class ReadArduino : MonoBehaviour
{
public string portname = "/dev/cu.usbmodem1411";
public int baudrate = 115200;
SerialPort _SerialPort;
public string stringReceived;
Thread myThread;
public bool runThread = false;
static string sendData;
static string readData;
public void Start ()
{
#if UNITY_STANDALONE_WIN && !UNITY_EDITOR_OSX
portname = "\\\\.\\" + portname;
#endif
_SerialPort = new SerialPort (portname, baudrate);
if (_SerialPort.IsOpen)
_SerialPort.Close ();
OpenConnection ();
runThread = true;
myThread = new Thread(new ThreadStart(GetArduino));
myThread.Start();
}
void Update ()
{
if (_SerialPort != null && !_SerialPort.IsOpen) {
OpenConnection ();
} else {
// setting static var for use in thread
sendData = myValue1 + "," + myValue2;
// reading static var from thread
stringReceived = readData;
if(stringReceived == null){
Debug.Log("No Data Received");
return;
}
string[] values = stringReceived.Split(',');
// Do Stuff With values
}
}
void ReadPort ()
{
try {
char[] SendToArduino = sendData.ToCharArray();
_SerialPort.Write (SendToArduino, 0, SendToArduino.Length);
readData = _SerialPort.ReadLine ();
_SerialPort.BaseStream.Flush();
} catch (System.IO.IOException ex) {
Debug.Log ("Read Error: " + ex.ToString ());
}
}
void GetArduino(){
while(runThread)
{
ReadPort ();
}
}
void OpenConnection ()
{
if (_SerialPort != null) {
if (_SerialPort.IsOpen) {
_SerialPort.Close ();
Debug.Log ("Closing port, because it was already open!");
} else {
try{
_SerialPort.Open ();
_SerialPort.ReadTimeout = 50;
_SerialPort.WriteTimeout = 50;
_SerialPort.DtrEnable = true;
Debug.Log ("Port Opened!");
}catch (System.IO.IOException ex) {
Debug.Log ("Unable to open SerialPort: " + ex.ToString ());
}
}
} else {
if (_SerialPort.IsOpen) {
Debug.Log ("Port is already open");
} else {
Debug.Log ("Port == null");
}
}
}
void CloseConnection(){
if (_SerialPort.IsOpen){
_SerialPort.Close ();
}
runThread = false;
myThread.Join();
}
void OnDestroy ()
{
CloseConnection();
}
void OnApplicationQuit ()
{
CloseConnection();
}
}
Your answer
Follow this Question
Related Questions
The Semaphore Timeout Period Has Expired 0 Answers
Using Arduino as controller in Unity is giving me bad framerate 1 Answer
Does not read information by serial port when creating executable 0 Answers
Arduino Unity3d FPS drop after twisting Potentiometer 0 Answers
unity to serial ports ( blink LED ) 0 Answers