我需要实现功能是unity接收串口命令(可以自定义十六进制或者字符串),

我需要实现功能是unity接收串口命令(可以自定义十六进制或者字符串),,第1张

Rick__的博客

登录

原 Unity串口通信 16进制 SerialPorts 设置COM口

Rick__阅读数:4422018-11-05

简介: 串口通信,实时传输,设置COM口,打包程序可设置COM口

1. 新建Unity工程,在场景中建立两个GameObject,分别命名:SerialPortsDataCtl(直接拖拽或查找DataCtl,代码中可自行修改)

2.新建两个C#脚本,分别命名:SerialPortScript;DataCtlScript,并分别挂载到上述两个游戏物体

3.在Assets文件夹中新建文件夹命名:streamingAssets;在streamingAssets文件夹中新建Text文件命名:PortNameConfig;

在PortNameConfig.txt中写入串口名字,例COM7

4.SerialPortScript:

unity文件保存发给别人步骤如下:

1、在Unity这里找到文件的发布设置。能够按下快捷键快速发布。

2、就可以在这里设置发布选项,即可发布。按住想要保存的东西,然后屏幕会有对话框,然后点击保存即可,这样就可以转发了。unity3D在project面板下选中需要导出的资源右击,有导出package的选项,可以生成unitypackage后缀的资源包。

通过System.IO.Ports来实现

    using UnityEngine

using System.Collections

using System.IO.Ports

using System

using System.IO

using System.Collections.Generic

public class PortControl : MonoBehaviour

{

    public string portName = "COM3"

    public int baudRate = 57600

    public Parity parity = Parity.None

    public int dataBits = 8

    public StopBits stopBits = StopBits.One

    SerialPort sp = null

    

    void Start()

    {

        OpenPort()

        StartCoroutine(DataReceiveFunction())

    }

    

    //打开串口

    public void OpenPort()

    {

        sp = new SerialPort(portName, baudRate, parity, dataBits, stopBits)

        sp.ReadTimeout = 400

        try

        {

            sp.Open()

        }

        catch(Exception ex)

        {

            Debug.Log(ex.Message)

        }

    }

    

    //关闭串口

    public void ClosePort()

    {

        try

        {

            sp.Close()

        }

        catch(Exception ex)

        {

            Debug.Log(ex.Message)

        }

    }

    

    /*

    若串口数据速度慢,数量小,可以在Update函数中使用sp.ReadByte等函数,该协程可以不用调用

    若串口数据速度较快,数量较多,就调用该协程(该程序就是这一种,在Start函数中已经被调用)

    若串口数据速度非常快,数量非常多,建议使用Thread

    */

    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)

                    //串口数据已经被存入dataBytes中

                    //往下进行自己的数据处理

                    //比如将你的数据显示出来,可以利用guiText.text = ....之类

                }

                catch(Exception ex)

                {

                    Debug.Log(ex.Message)

                }

                }

                yield return new WaitForSeconds(Time.deltaTime)

        } 

    }

    

    void OnApplicationQuit()

    {

        ClosePort ()

    }

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8066350.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存