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 ...
随机推荐
- java 异步处理
详情请看:http://www.cnblogs.com/yezhenhan/archive/2012/01/07/2315645.html 引入ExecutorService 类 private st ...
- DB&SQL备忘
DB2最佳分页语句 SELECT * FROM ( SELECT inner2_.*, ROWNUMBER() OVER(ORDER BY ORDER OF inner2_) AS rownumber ...
- [uva11722&&cogs1488]和朋友会面Joining with Friend
几何概型,<训练指南>的题.分类讨论太神啦我不会,我只会萌萌哒的simpson强上~这里用正方形在y=x-w的左上方的面积减去在y=x+w左上方的面积就是两条直线之间的面积,然后切出来的每 ...
- ubuntu使用doxygen
1.安装 sudo apt-get install doxygen按tab键 doxygen doxygen-dbg doxygen-doc doxygen-gui d ...
- NPOI操作Excel时使用列头来读取数据的方法
首先定义扩展方法: public static ICell GetCell(this IRow row, string clounmName) { IRow firstRow = row.Sheet. ...
- mysql中bit_count和bit_or函数的含义
翻阅mysql手册时,看到有个示例使用了bit_or方法来去除重复的数据,一开始没看明白,后来看明白之后感觉非常巧妙.示例要实现的功能就是计算每月有几天有访问,先把示例摘录在这里. 1 2 3 4 5 ...
- Google 地图 API V3 之 叠加层
Google官方教程: Google 地图 API V3 使用入门 Google 地图 API V3 针对移动设备进行开发 Google 地图 API V3 之事件 Google 地图 API V3 ...
- apache启动出错原因举例
这是我这两天频繁遇到的问题.Apache服务器还真是问题少年!任何点改动都可能导致它无法使用. 原因一:80端口占用例如IIS,另外就是迅雷.我的apache服务器就是被迅雷害得无法启用! 原因二:软 ...
- SQL SERVER几种数据迁移/导出导入的实践
SQLServer提供了多种数据导出导入的工具和方法,在此,分享我实践的经验(只涉及数据库与Excel.数据库与文本文件.数据库与数据库之间的导出导入). (一)数据库与Excel 方法1: 使用数据 ...
- tyvj1148 小船弯弯
描述 童年的我们,充满了新奇的想法.这天,小朋友们用彩虹画笔在云霞上绘制了世界上最美丽的图画.那描绘的是一条大河波浪宽,风吹稻花香两岸的情景.欣赏着自己的作品,小朋友们别提多开心了.这时,Q小朋友对C ...