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 UnitySerialPort : MonoBehaviour
{ private SerialPort sp;
private Queue queueDataPool;
private Thread tPort;
private Thread tPortDeal;
private string strOutPool = string.Empty;
string finalstring = string.Empty;
string tempstring = string.Empty; byte flag0 = 0xAA;//start sign
byte flag1 = 0x8E;//end sign List<Byte> cmdList = null;//catch pre sign List<List<Byte>> DataList = new List<List<byte>>();//catch all sign // Use this for initialization
void Start()
{
sp = new SerialPort("COM3", , Parity.None, , 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[];
string sbReadline2str = string.Empty;
if (sp.IsOpen) sp.Read(buf, , );
if (buf.Length == )
{
return;
}
if (buf != null)
{ for (int i = ; i < buf.Length; i++)
{
if (buf[i] == flag0)
{
cmdList = new List<Byte>();
cmdList.Add(buf[i]);
}
else if (buf[i] == flag1)
{
cmdList.Add(buf[i]);
DataList.Add(cmdList);
}
else
{
cmdList.Add(buf[i]);
}
} if (DataList.Count > )
{
List<byte> cmd = DataList[]; StringBuilder sb = new StringBuilder();
for (int i = ; i < cmd.Count; i++)
{
sb.Append(cmd[i] + " ");
} Debug.Log(sb.ToString()); DataList.RemoveAt();
} }
}
catch (Exception ex)
{
Debug.Log(ex);
}
}
private void DealData()
{
while (queueDataPool.Count != )
{
for (int i = ; i < queueDataPool.Count; i++)
{
strOutPool += queueDataPool.Dequeue();
if (strOutPool.Length == )
{
Debug.Log(strOutPool);
strOutPool = string.Empty;
}
} }
} private void SendSerialPortData(string data)
{
if (sp.IsOpen)
{
sp.WriteLine(data);
}
} void OnApplicationQuit()
{
sp.Close();
} void OnGUI()
{
if (GUILayout.Button("Send Data", GUILayout.Height()))
{
byte[] buffer = { 0xAA, 0x00, 0x22, 0x00, 0x00, 0x22, 0x8E };
sp.Write(buffer, , buffer.Length);
} }
}

Unity3D SerialPort处理的更多相关文章

  1. 出售 unity3d串口插件

    出售unity3d串口插件 利用C++编写,解决了mono库 serialport的bug. serialport串口的bug地方在于: 1.有一些数据无法收到. 2.会丢失第一个字节. 3.延迟 我 ...

  2. Unity3d学习 预设体(prefab)的一些理解

    之前一直在想如果要在Unity3d上创建很多个具有相同结构的对象,是如何做的,后来查了相关资料发现预设体可以解决这个问题! 预设体的概念: 组件的集合体 , 预制物体可以实例化成游戏对象. 创建预设体 ...

  3. Unity3d入门 - 关于unity工具的熟悉

    上周由于工作内容较多,花在unity上学习的时间不多,但总归还是学习了一些东西,内容如下: .1 根据相关的教程在mac上安装了unity. .2 学习了unity的主要的工具分布和对应工具的相关的功 ...

  4. TDD在Unity3D游戏项目开发中的实践

    0x00 前言 关于TDD测试驱动开发的文章已经有很多了,但是在游戏开发尤其是使用Unity3D开发游戏时,却听不到特别多关于TDD的声音.那么本文就来简单聊一聊TDD如何在U3D项目中使用以及如何使 ...

  5. warensoft unity3d 更新说明

    warensoft unity3d 组件的Alpha版本已经发布了将近一年,很多网友发送了改进的Email,感谢大家的支持. Warensoft Unity3D组件将继续更新,将改进的功能如下: 1. ...

  6. Unity3D框架插件uFrame实践记录(一)

    1.概览 uFrame是提供给Unity3D开发者使用的一个框架插件,它本身模仿了MVVM这种架构模式(事实上并不包含Model部分,且多出了Controller部分).因为用于Unity3D,所以它 ...

  7. Unity3D 5.3 新版AssetBundle使用方案及策略

    1.概览 Unity3D 5.0版本之后的AssetBundle机制和之前的4.x版本已经发生了很大的变化,一些曾经常用的流程已经不再使用,甚至一些老的API已经被新的API所取代. 因此,本文的主要 ...

  8. 山寨Unity3D?搜狐畅游的免费开源游戏引擎Genesis-3D

    在CSDN上看到了<搜狐畅游发布3D游戏引擎Genesis-3D 基于MIT协议开源>(http://www.csdn.net/article/2013-11-21/2817585-cha ...

  9. 从Unity3D编译器升级聊起Mono

    接前篇Unity 5.3.5p8 C#编译器升级,本文侧重了解一些Mono的知识. Unity3D的编译器升级 新升级的Mono C#编译器(对应Mono 4.4) Unity编辑器及播放器所使用的M ...

随机推荐

  1. php session和cookie知识

  2. 用js取1-100的随机数

    function sum (m,n){ var num = Math.floor(Math.random()*(m - n) + n); alert(num) } sum(1,100): 万能 公式, ...

  3. 算法训练 Multithreading

     算法训练 Multithreading   时间限制:1.0s   内存限制:256.0MB      问题描述 现有如下一个算法: repeat ni times yi := y y := yi+ ...

  4. Ajax请求数据的两种方式

    ajax 请求数据的两种方法,有需要的朋友可以参考下. 实现ajax 异步访问网络的方法有两个.第一个是原始的方法,第二个是利用jquery包的 原始的方法不用引入jquery包,只需在html中编写 ...

  5. IoT 通信协议

    /********************************************************************************* * IoT 通信协议 * 说明: ...

  6. explain结果字段说明

    Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看SQL语句的执行效 果,可以帮助选择更好的索引和优化查询语句,写出更好的优 ...

  7. 最优比率生成树 POJ 2728 迭代或者二分

    别人解题报告的链接: http://blog.sina.com.cn/s/blog_691190870101626q.html 说明一下关于精度的问题,当结果是精确到小数点后3为,你自然要把误差定为至 ...

  8. (8)propetry装饰器

    propetry是一个内置函数,用来将一个功能伪装成一个数据属性 property将一个方法伪装成一个数据属性class People: def __init__(self,name,height,w ...

  9. 【多线程学习笔记整理】002_线程的停止、暂停、与yield

    一.停止线程的三种方式 停止线程是多线程中的一个很重要的点,停止线程意味着在线程处理完当前任务之前终止正在做的操作,但是如果不能正确的操作,可能会发生不可预期的结果. 1)使用退出标志,使线程正常退出 ...

  10. ==,equals,hashcode

    总结:== 基本类型比较值,引用类型比较是不是同一个对象,也就是比较内存地址 equals 在没有覆盖的情况下是比较 引用的地址的  和 == 一样 hashcode 和equals关系: hashc ...