unity3d中串口的使用
工作中遇到了串口的问题,通过查资料&实验写出了下面代码;
关于串口的代码我在网上看了好多,一种是用事件来做,另外一种使用线程来做;(经过试验,unity无法用串口自带的事件进行数据读取);
看完以后,个人感觉比较麻烦,所以就用了下面的方式;
PS:也可以改成用IEnumerator 或者Invoke来写
using UnityEngine;
using System.Collections;
using System.IO.Ports;
using System;
using System.Text; public class ProtTest : MonoBehaviour
{
//串口
private SerialPort port = new SerialPort();
//用于读取缓存区数据
private byte[] readBuffer;
//缓存byte转化的string
private string byteConvertSave;
//缓存没有用过的数据
private string portDataSave = "";
//缓存依照约定拆解的字符串
private string[] portDataSplit;
//缓存有效数据
private string validData = ""; private void Awake()
{
InitProp();
} /// <summary>
/// 初始化串口
/// </summary>
private void InitProp()
{
port.PortName = "COM3";
port.BaudRate = ;
port.Parity = Parity.None;
port.DataBits = ;
port.StopBits = StopBits.One;
port.Open();
} void Update()
{
HandleProtData();
DoSomething();
} /// <summary>
/// 接收处理串口字符串,将字符串转换为标准形式
/// </summary>
private void HandleProtData()
{
if (!port.IsOpen)
{
return;
} //读取串口数据
readBuffer = new byte[port.ReadBufferSize];
try
{
int count = port.Read(readBuffer, , port.ReadBufferSize);
//转化成字符串
byteConvertSave = Encoding.ASCII.GetString(readBuffer, , count);
if (count != )
{
//保存字符串
portDataSave += byteConvertSave;
}
}
catch (TimeoutException)
{
} //拆解字符串
portDataSplit = portDataSave.Split('\n');//按照约定规则 /* 下面这样做是因为串口传过来的字符串不一定是完整的
* 比如说,正常的数据是
* 第一次传输a,b,c,d;
* 第二次传输c,f,b,g;
* 可能传过来的数据就变成了
* 第一次传输a,b,c,d;c,f
* 第二次传输,b,g;
*/
if (portDataSplit.Length > )
{
//倒数第二个数据是有效数据,因为是完整的
validData = portDataSplit[portDataSplit.Length - ];
//及时清除无用数据
//将当前未使用的数据更新为倒数第一个数据
portDataSave = portDataSplit[portDataSplit.Length - ];
}
} /// <summary>
/// 做什么东西
/// </summary>
private void DoSomething()
{
CheckData();
} /// <summary>
/// 检查数据是否符合规则
/// </summary>
/// <returns></returns>
private bool CheckData()
{
return false;
}
}
PS:最后说一下遇到的问题和解决方法:
问题:那就是找不到SerialProp这个类,当我引入using System.IO.Ports的时候,报错说找不到该命名空间。
解决方法:playersetting里面Api Compatibility Level 选择 .NET2.0而不是 .NET2.0 SubSet。
unity3d中串口的使用的更多相关文章
- 【Unity3d游戏开发】Unity3D中的3D数学基础---向量
向量是2D.3D数学研究的标准工具,在3D游戏中向量是基础.因此掌握好向量的一些基本概念以及属性和常用运算方法就显得尤为重要.在本篇博客中,马三就来和大家一起回顾和学习一下Unity3D中那些常用的3 ...
- Unity3D中可中途释放的单例
Unity3D中可中途释放的单例 使用静态类,静态变量的坏处是从程序加载后就一直占用内存,想要释放比较麻烦,可是之前使用的单例,没有提供释放的方法,那是不是也同静态的一样直到程序结束菜释放?那单例的好 ...
- 图文详解Unity3D中Material的Tiling和Offset是怎么回事
图文详解Unity3D中Material的Tiling和Offset是怎么回事 Tiling和Offset概述 Tiling表示UV坐标的缩放倍数,Offset表示UV坐标的起始位置. 这样说当然是隔 ...
- unity3d中 刚体(Rigidbody) 碰撞体(Collider) 触发器(Is Trigger)
刚体(Rigidbody)的官方(摘自Unity3d的官方指导书<Unity4.x从入门到精通>)解释如下: Rigidbody(刚体)组件可使游戏对象在物理系统的控制下来运动,刚体可 ...
- Unity3D中Update()与FixedUpdate()的区别
Unity3D中Update()与FixedUpdate()的区别是什么呢?从字面上理解,它们都是在更新时会被调用,并且会循环的调用.但是Update会在每次渲染新的一帧时,被调用.而FixedUpd ...
- Unity3D中C#和js方法相互调用
通过查找资料,Unity3D中C#和js要相互调用彼此的方法,js文件必须放在"Standard Assets". "Pro Standard Assets" ...
- 在unity3d中使用opencv
1.首先下载opencv2.4.10,解压缩后放在合适的地方,然后根据自己的电脑(32位或64位)选择X86或X64,我的是32位,将“opencv存放路径\build\x86\vc12\bin”加入 ...
- Unity3D 中 用quaternion 来对一个坐标点进行旋转的初步体会
在unity3d中,用四元数来表示旋转,四元数英文名叫quaternion . 比如 transform.rotation 就是一个四元数,其由四个部分组成 Quaternion = (xi + yj ...
- 【转】Unity3D中Layers和LayerMask解析
http://blog.csdn.net/yupu56/article/details/50441151 Unity中是用int32来表示32个Layer层.int32表示二进制一共有32位(0-31 ...
随机推荐
- CommandBehavior.CloseConnection
cmd.commandTimeout设置为了1秒,sql执行了很长时间还没有超时, cmd.ExecuteReader(CommandBehavior.CloseConnection)这样就会立马重现 ...
- Android 手机怎么录屏制成gif图片
参考:http://www.cnblogs.com/dasusu/p/4903511.html 上面的博主说的很详细了,但作为学习记录我就重新写一遍帮助自己加深记忆 一.准备条件 1.你搭建了Andr ...
- bzoj 3055礼物运送 floyed + 状压DP
bzoj 3055: 礼物运送 floyed first 设f[i][S]表示取到了S集合中的所有点(不一定是经过的所有点),最后停在了i的最优值. 初始就f[i][{i}] = dis[1][i] ...
- strlen()和sizeof()求数组长度
在字符常量和字符串常量的博文里有提: 求字符串数组的长度 标准库函数strlen(s)可以返回字符串s的长度,在头文件<string.h>里. strlen(s)的判断长度的依据是(s[i ...
- 【Alpha版本】十天冲刺——日志集合贴
No Bug 031402401鲍亮 031402402曹鑫杰 031402403常松 031402412林淋 031402418汪培侨 031402426许秋鑫 Day1 Day2 Day3 Day ...
- 【Beta】Scrum04
Info 由于上次验收基本没有人按时完成,缓冲一个任务周期. 时间:2016.12.06 21:30 时长:25min 地点:大运村1号公寓5楼楼道 类型:日常Scrum会议 NXT:2016.12. ...
- bzoj 1065: [NOI2008] 奥运物流
1065: [NOI2008] 奥运物流 Description 2008北京奥运会即将开幕,举国上下都在为这一盛事做好准备.为了高效率.成功地举办奥运会,对物流系统 进行规划是必不可少的.物流系统由 ...
- BZOJ1491: [NOI2007]社交网络
传送门 最短路计数问题.因为数据量非常小($N \leq 100$),所以Floyd随便搞搞就行了. $f[i][j]$表示路径长度,$g[i][j]$表示最短路方案数. 先跑一遍裸的Floyd,然后 ...
- Linux ext3 ext4 区别
Linux kernel 自 2.6.28 开始正式支持新的文件系统 Ext4. Ext4 是 Ext3 的改进版,修改了 Ext3 中部分重要的数据结构,而不仅仅像 Ext3 对 Ext2 那样,只 ...
- Web jquery表格组件 JQGrid 的使用 - 11.问题研究
系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...