using System; using System.Collections; using System.Collections.Generic; using System.IO.Ports; using System.Threading; using UnityEngine; using LitJson; public class MyMagneticSerialPort : MonoBehaviour { private SerialPort serialPort; private Thread readPortData; //public List listReceive = new List(); public string jsonData = ""; //根据磁场数据反射磁场针转向 public Transform MagneticNeedle; // Use this for initialization void Start() { //Application.targetFrameRate = 120; try { serialPort = new SerialPort("COM4", 115200); serialPort.ReadTimeout = 500; if (!serialPort.IsOpen) { serialPort.Open(); } readPortData = new Thread(new ThreadStart(readData)); readPortData.IsBackground = true; readPortData.Start(); } catch (Exception) { throw; } } // Update is called once per frame void Update() { if (jsonData != "") { MPUMagneticData mpudata_ = JsonMapper.ToObject(jsonData); MagneticNeedle.localEulerAngles = new Vector3(((float)mpudata_.MagneticX-5)*4, ((float)mpudata_.MagneticY-67)*4, ((float)mpudata_.MagneticZ - 5) * 4); //Debug.LogWarning("Temperature = " + mpudata_.Temperature); //print("x=" + mpudata_.GyroX + "||y=" + mpudata_.GyroY + "||z=" + mpudata_.GyroZ + "____Ax=" + mpudata_.AccelX + "||Ay=" + mpudata_.AccelY + "||Az=" + mpudata_.AccelZ + "-----" + Time.deltaTime); //MpuBoardTrans.transform.localPosition += new Vector3(speedX/1000, 0, 0); //print("speed="+speedY); } } //结束后关闭串口 private void OnDestroy() { if (serialPort.IsOpen) serialPort.Close(); readPortData.Abort(); } //弧度转角度 private float TransRadToAngle(double rad) { //return -(float)rad * 180 / Mathf.PI; return (float)rad * 90; } /// /// 读取数据 /// private void readData() { try { while (serialPort != null && serialPort.IsOpen) { byte addr = Convert.ToByte(serialPort.ReadByte()); serialPort.DiscardInBuffer(); //listReceive.Add(addr); //print("{"+serialPort.ReadLine()); jsonData = "{" + serialPort.ReadLine(); } } catch (Exception) { throw; } } private void caculateSpeed(float accelSpeed) { } }