You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
2.7 KiB
102 lines
2.7 KiB
|
4 years ago
|
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<byte> listReceive = new List<byte>();
|
||
|
|
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<MPUMagneticData>(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;
|
||
|
|
}
|
||
|
|
/// <summary>
|
||
|
|
/// 读取数据
|
||
|
|
/// </summary>
|
||
|
|
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)
|
||
|
|
{
|
||
|
|
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|