美文网首页
每日一学26——Unity C# 串口

每日一学26——Unity C# 串口

作者: ShawnWeasley | 来源:发表于2020-07-20 15:28 被阅读0次

学习来源:https://blog.csdn.net/q764424567/article/details/101053821/?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-2

朋友让帮忙写个串口的脚本,网上有很多自写的串口通信,比如这篇。估计是不知道有直接可以调用的API。在此整理成工具类方便以后调用(因本地没有串口硬件,未实测)。
调用方式:

using System.IO.Ports;
using UnityEngine;

public class Test : MonoBehaviour
{

    void Start()
    {
        //生成对象并通过构造函数赋值
        SerialPortEx serialPortEx = new SerialPortEx("COM1", 9600, Parity.None, 8, StopBits.One);
        //调用发送数据
        serialPortEx.SendData("ok", CallBack);
    }

    void CallBack(string data)
    {
        Debug.Log(data);
    }
}

工具类:

using System.IO.Ports;
using System.Text;
using System;

public partial class SerialPortEx
{
    //串口
    private SerialPort SerialPort;
    //回调
    private Action<string> CallBack;

    /// <summary>
    /// 构造函数
    /// </summary>
    /// <param name="portName">串口名,一般为COM1, COM2等</param>
    /// <param name="baudRate">波特率,也就是串口通讯的速度,进行串口通讯的双方其波特率需要相同,如果用PC连接其他非PC系统,一般地,波特率由非PC系统决定。</param>
    /// <param name="parity">奇偶校验</param>
    /// <param name="dataBits">数据位</param>
    /// <param name="stopbits">停止位</param>
    public SerialPortEx(string portName, int baudRate, Parity parity, int dataBits, StopBits stopbits)
    {
        //绑定端口
        SerialPort = new SerialPort(portName, baudRate, parity, dataBits, stopbits);
        //订阅委托
        SerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceived);
    }

    /// <summary>
    /// 初始化串口参数
    /// </summary>
    /// <param name="portName">串口名,一般为COM1, COM2等</param>
    /// <param name="baudRate">波特率,也就是串口通讯的速度,进行串口通讯的双方其波特率需要相同,如果用PC连接其他非PC系统,一般地,波特率由非PC系统决定。</param>
    /// <param name="parity">奇偶校验</param>
    /// <param name="dataBits">数据位</param>
    /// <param name="stopbits">停止位</param>
    public void InitSerialPort(string portName, int baudRate, Parity parity, int dataBits, StopBits stopbits)
    {
        //绑定端口
        SerialPort = new SerialPort(portName, baudRate, parity, dataBits, stopbits);
        //订阅委托
        SerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceived);
    }

    /// <summary>
    /// 串口回调
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        byte[] retrunData = new byte[SerialPort.BytesToRead];
        //读取数据
        SerialPort.Read(retrunData, 0, retrunData.Length);
        //转string
        string dataStr = ByteToString(retrunData);
        //回调
        CallBack(dataStr);
    }

    /// <summary>
    /// Byte转String
    /// </summary>
    /// <param name="data"></param>
    /// <returns></returns>
    private string ByteToString(byte[] data)
    {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < data.Length; i++)
        {
            sb.AppendFormat("{0:x2}" + "", data[i]);
        }
        return sb.ToString();
    }

    /// <summary>
    /// 发送串口数据
    /// </summary>
    /// <param name="portName">串口名,一般为COM1, COM2等</param>
    /// <param name="baudRate">波特率,也就是串口通讯的速度,进行串口通讯的双方其波特率需要相同,如果用PC连接其他非PC系统,一般地,波特率由非PC系统决定。</param>
    /// <param name="parity">奇偶校验</param>
    /// <param name="dataBits">数据位</param>
    /// <param name="data">发送数据</param>
    /// <param name="callBack">回调函数,需有string参数</param>
    public void SendData(string portName, int baudRate, Parity parity, int dataBits, StopBits stopbits, string data, Action<string> callBack)
    {
        InitSerialPort(portName, baudRate, parity, dataBits, stopbits);
        CallBack = callBack;
        SerialPort.Open();
        SerialPort.WriteLine(data);
        SerialPort.Close();
    }

    /// <summary>
    /// 发送串口数据
    /// </summary>
    /// <param name="data">发送数据</param>
    /// <param name="callBack">回调函数,需有string参数</param>
    public void SendData(string data, Action<string> callBack)
    {
        CallBack = callBack;
        SerialPort.Open();
        SerialPort.WriteLine(data);
        SerialPort.Close();
    }
}

这个别忘了选


Api Compatibility Level

相关文章

网友评论

      本文标题:每日一学26——Unity C# 串口

      本文链接:https://www.haomeiwen.com/subject/jqgekktx.html