网站公告 | 泰斗网校全新上线了,可以和论坛用户登录同步,如果遇到登录问题联系管理员解决
查看: 7978|回复: 13
收起左侧

[Unity3d] unity 串口通信发送与接收

[复制链接]

[Unity3d] unity 串口通信发送与接收[复制链接]

kuanyidairen 发表于 2018-3-18 15:07:52 [显示全部楼层] 回帖奖励 |倒序浏览 |阅读模式 回复:  13 浏览:  7978
5泰斗币
unity 串口通信发送与接收。
网上找的源码,可以发送串口命令。
接收命令可以在控制台打印出来。 但是不会执行某个命令。 比如接收到某个串口命令,跳转到某个场景,或者播放某个视频。
哪位大神能不能帮忙,给这个功能完善一下, 谢谢!







using UnityEngine;
using System.Collections;
using System;
using System.Threading;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO.Ports;
using System.Text.RegularExpressions;
using System.Text;

public class SerialPortReciever : MonoBehaviour
{

    private SerialPort sp;
    private Queue<string> queueDataPool;
    private Thread tPort;
    private Thread tPortDeal;
    private string strOutPool = string.Empty;
    string finalstring = string.Empty;
    string tempstring = string.Empty;
    // Use this for initialization
    void Start()
    {
        queueDataPool = new Queue<string>();

        sp = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
        if (!sp.IsOpen)
        {
            sp.Open();
        }
        tPort = new Thread(DealData);
        tPort.Start();
        tPortDeal = new Thread(ReceiveData);
        tPortDeal.Start();
    }

    // Update is called once per frame
    void Update()
    {
        if (!tPortDeal.IsAlive)
        {
            tPortDeal = new Thread(ReceiveData);
            tPortDeal.Start();
        }
        if (!tPort.IsAlive)
        {
            tPort = new Thread(DealData);
            tPort.Start();
        }
    }

    private void ReceiveData()
    //接收数据
    {
        try
        {
            Byte[] buf = new Byte[1];
            string sbReadline2str = string.Empty;
            if (sp.IsOpen) sp.Read(buf, 0, 1);
            if (buf.Length == 0)
            {
                return;
            }
            if (buf != null)
            {
                for (int i = 0; i < buf.Length; i++)
                {
                    sbReadline2str += buf.ToString("X2");
                    queueDataPool.Enqueue(sbReadline2str);
                }
            }
        }
        catch (Exception ex)
        {
            Debug.Log(ex);
        }
    }
    private void DealData()
        //处理数据
    {
        while (queueDataPool.Count != 0)
        {
            for (int i = 0; i < queueDataPool.Count; i++)
            {
                strOutPool+= queueDataPool.Dequeue();
                if(strOutPool.Length == 16)
                                {
                                        Debug.Log(strOutPool);       //可以打印到控制台
                                        strOutPool=string.Empty;
                                }
            }

        }
    }

    private void SendSerialPortData(string data)
        //发送数据
        {
                if(sp.IsOpen)
                {
                        sp.WriteLine(data);
            Debug.Log(data );
        }
        }



    public void ButtonClick()
    {

        //实际串口代码是   FE 05 00 00 FF 00 98 35
        byte[] buffer = { 0xFE, 0x05, 0x00, 0x00, 0xFF, 0x00, 0x98, 0x35 };

        sp.Write(buffer, 0, buffer.Length);

    }



    public void ButtonClick1()
    {
        //实际串口是 FE 05 00 00 00 00 D9 C5

        byte[] buffer = { 0xFE, 0x05, 0x00, 0x00, 0x00, 0x00, 0xD9, 0xC5 };

        sp.Write(buffer, 0, buffer.Length);

    }

    void OnApplicationQuit()
    {
        sp.Close();
    }
}

+1
7983°C
13
  • 善良的四爷
  • 善良的四爷
  • yeweidon111
  • tdsq
  • kuanyidairen
过: 他们
因分享而快乐,学习以自强!
善良的四爷 发表于 2018-3-18 15:46:37 显示全部楼层
好人一生平安!
因分享而快乐,学习以自强!
善良的四爷 发表于 2018-3-18 16:14:03 显示全部楼层
unity3D
因分享而快乐,学习以自强!
yeweidon111 发表于 2018-3-19 09:57:03 显示全部楼层
好人一生平安!
因分享而快乐,学习以自强!
tdsq 发表于 2018-3-19 11:12:34 显示全部楼层
代码为什么不放代码块里面 这样看着好不舒服
因分享而快乐,学习以自强!
kuanyidairen
 楼主|
发表于 2018-3-19 16:07:11 显示全部楼层
tdsq 发表于 2018-3-19 11:12
代码为什么不放代码块里面 这样看着好不舒服

初学,不怎么会。 想求一段代码。接收到串口数据后, 跳转场景。
因分享而快乐,学习以自强!
huangyuxiao 发表于 2018-3-21 15:56:33 显示全部楼层
因分享而快乐,学习以自强!
因分享而快乐,学习以自强!
学习题_DDGO 发表于 2018-3-23 17:17:19 显示全部楼层
a8ga找素材啊找素材
因分享而快乐,学习以自强!
ferria007 发表于 2018-4-16 17:42:59 显示全部楼层
a8ga找素材啊找素材
因分享而快乐,学习以自强!
xuwave 发表于 2018-4-27 20:46:21 显示全部楼层
Byte[] buf = new Byte[1];             string sbReadline2str = string.Empty;             if (sp.IsOpen) sp.Read(buf, 0, 1);这一段里面就可以解析命令了,将字节数组转字符,解析命令触发事件
因分享而快乐,学习以自强!
A00童爱宝 发表于 2018-4-29 23:39:51 显示全部楼层
希望我能懂。!可是我不懂!
因分享而快乐,学习以自强!
qq1186351245 发表于 2018-5-4 10:32:15 显示全部楼层
串口通信,哇,大佬做出来,能开源一份么
因分享而快乐,学习以自强!
Asher312 发表于 2018-5-12 16:57:51 显示全部楼层
围观一下
因分享而快乐,学习以自强!
sa5624 发表于 2018-5-12 19:02:44 显示全部楼层
这个代码相当的高级
因分享而快乐,学习以自强!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

VR/AR版块|Unity3d|Unreal4|新手报道|小黑屋|站点地图|沪ICP备14023207号-9|【泰斗社区】-专注互联网游戏和应用的开发者平台 ( 浙ICP 备 13006852号-15 )|网站地图

© 2001-2013 Comsenz Inc.  Powered by Discuz! X3.4

1
QQ