赞
踩
已经很久没有更新博客了,因为工作忙的原因,也因为自己忙了一些其他的事情…不说了,这篇博客简单介绍一下串口通信的用法,简单,但是用处很大,可以使用Unity和一些硬件进行交互,言归正传,开始。
1.新建工程,打开Player Setting,将Configuration中的Api Compatibility level设置为.Net2.0,貌似.Net Subset不包含串口通信的功能,具体需查下Unity api。2.新建一个空物体,并且创建一个PortManager脚本,将此脚本挂在空物体上。
3.打开PortManager,输入以下代码。
using System.Collections; using System.Collections.Generic; using UnityEngine; using System.IO.Ports; using System; public class PortManager : MonoBehaviour { string getPortName; int baudRate = 9600; private Parity parity = Parity.None; private int dataBits = 8; private StopBits stopBits = StopBits.One; SerialPort sp = null; private string _data; private string testString; // Use this for initialization void Start () { getPortName = "COM3"; testString = "b"; OpenPort(getPortName); StartCoroutine(DataReceiveFunction()); } /// <summary> /// 串口信号控制 /// </summary> private void PortSignalControl() { if (_data == System.Text.Encoding.ASCII.GetBytes(testString)[0].ToString()) { Debug.Log("收到串口信号" + testString); } } //打开串口 public void OpenPort(string DefaultPortName) { sp = new SerialPort(DefaultPortName, baudRate, parity, dataBits, stopBits); sp.ReadTimeout = 10; try { if (!sp.IsOpen) { sp.Open(); } } catch (Exception ex) { Debug.Log(ex.Message); } } //关闭串口 public void ClosePort() { try { sp.Close(); } catch (Exception ex) { Debug.Log(ex.Message); } } IEnumerator DataReceiveFunction() { byte[] dataBytes = new byte[128];//存储长度 int bytesToRead = 0;//记录获取的数据长度 while (true) { if (sp != null && sp.IsOpen) { try { //通过read函数获取串口数据 bytesToRead = sp.Read(dataBytes, 0, dataBytes.Length); _data = dataBytes[0].ToString(); print(_data); PortSignalControl(); //串口数据已经被存入dataBytes中 } catch (Exception ex) { } } yield return new WaitForSeconds(Time.deltaTime); } } //发送一个字节 public void SendSerialPortData(string data) { if (sp.IsOpen) { sp.WriteLine(data); } } /// <summary> /// 发送一个字符串 /// </summary> public void SendString() { SendSerialPortData("a"); } private void OnApplicationQuit() { ClosePort(); } private void OnDisable() { ClosePort(); } }
4.在场景中添加一个按钮,将PortManager里的SendString方法拖到此按钮中。
5.打开串口助手,进行如下设置,并且打开串口。
6.在串口助手的发送缓冲区输入a,点击发送数据按钮。
7.Unity已经打印出了数据,说明已经接收到了串口助手发来的数据。
8.点击Unity场景里的按钮。
9.串口数据已经得到了数据,如图所示。
10.小结:这个是最简单的串口调用Demo,基本写出了串口通信的基本方法,可以在此基础上写更加复杂的逻辑。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。