unity | 串口的理解和程序应用

一、串口的理解

串口,全称(串行通讯端口),英文名(cluster communication port),英文简称(COM口)。

首先需要知道的是:

串口是一个硬件

叫串行通讯端口的原因是:

我们在程序里发送时,一般发送的是byte数组,这个数组是一起发出去的,但肯定前面和后面的数会有一点点时间差,串口就把这个一起收到的byte数组,拆成一个一个,按时间一个一个的发送出去。

二、常见名词(TTL、RS232、RS485、RS422)

这几个东西可以理解为电信号,用电流来区分信息。

硬件一般就是和机器进行互动,我们经常说,机器只能看懂0和1两个信号,所以,我们需要想办法把信号分成0和1两个。

区分方法是通过控制电压不同:

TTL:

电压高于2.7V就认为是1;

电压小于0.5V就认为是0;

RS232:

输入时:电压在-3~-15V就认为1;电压在+3~+15V就认为是0;

输出时:电压在-5~-15 V就认为1;电压在+5~+15 V就认为是0;

由于接口的电压常用在5V左右,所以非常常见的电信号就是RS232;

RS485:

这个接的是两条线,第一条称作A,第二条称作B

输入时:A比B高200mV以上就认为1,低200mV以上就认为0;

输出时:2<A-B<6就认为是1,-6<A-B<-2就认为是0;

所以这几个词只是由于电压不同,选择了不同的串口。

USB和串口不是一个东西,所以如果连了USB口,那就是有硬件把信号从USB转到了我们用的串口上。

三、串口和十六进制的关系

曾今我们发信息就是:000110101010,这样就很容易弄错,多发个1,少发个0,都看不出来,你也不知道发完没有,后面还有没有,收够了没有,很容易搞错。

所以他们想,把每次发的个数都定下来,不够的用0补上,这样就不容易错。

例,如果定下来,一次必须发8个数,那么我想发个1,就必须发0000 0001。

想来想去,那就发16进制吧,因为一个16进制转换成2进制,刚好就是8个数,这样大家都约定好,每次只发8个数,那边就每次只接8个数,这样大家好核对,不容易出错。

提示0x,不是发的信息,只是一个注释,表示后面的数是16进制,而不是别的。

串口协议中,开始会先让发个0x55,或者0xaa,因为55转换成2进制为01010101,aa转换成2进制为10101010,这两个因为都是1和0错开的,所以不容易搞错,然后通过接收到0和1的间隔,能算出来传播的速度(波特率),这样可以初步判断后面应该以什么速度接收,和猜出(算出)波特率。

波特率的意思:

1秒传几个bit,9600就是1秒钟传9600个bit

一个byte是8个bit,所以一秒可以传1200byte,

通俗点说,就是,一秒可以传1200个0或1。

 四、收发串口的插件SerialPortUtilityPro

可以在网上自行下载

五、使用SerialPortUtilityPro收发信息

这个插件里带了一个组件,叫SerialPortUtilityPro

新建一个空物体→addComponent→SerialPortUtilityPro

空物体上就会出现这个组件,这个组件就是用来收发串口信息的。

如果只有一个串口,希望发16进制的信息,设置如下。

六、发送和接收信息的代码

	public SerialPortUtilityPro sp;
	public string cmd;
	public Button button;
    private void Start()
    {
		//当点击按钮的时候,就发送一个string信息
		button.onClick.AddListener(()=>
		{
			//把信息转换成16进制
			SendHexData(cmd);
		});

	}
    public void SendHexData(string msg)
	{
		sp.Write(HexStringToData(msg));
	}

	//如果接收到信息,转换成string
	public void ReadStreamingBinary(object data)
	{
		var bin = data as byte[];
		string byteArray = System.BitConverter.ToString(bin);
		ConvertData(byteArray);
	}
	private void ConvertData(string byteArray)
	{
		Debug.Log(byteArray);
	}

	//把string转换成16进制信息
	private byte[] HexStringToData(string text)
	{
		string[] hexValuesSplit = text.Split(' ');
		byte[] retData = new byte[hexValuesSplit.Length];
		int inum = 0;
		foreach (string hex in hexValuesSplit)
		{
			try
			{
				// Convert the number expressed in base-16 to an integer.
				retData[inum] = System.Convert.ToByte(hex, 16);
				++inum;
			}
			catch (System.FormatException)
			{
				//ignore
			}
		}

		return retData;
	}

 七、把接收信息的代码挂到组件上

 

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
你好!对于使用Unity开发Hololens 2的MR应用程序,你可以参考以下步骤: 1. 安装所需的软件和工具:首先,确保你已经安装了Unity引擎和Hololens 2的开发工具包(HoloLens 2 Development Edition)。可以从Unity官网下载Unity引擎,而Hololens 2的开发工具包可以从Microsoft官网获取。 2. 创建新项目:打开Unity引擎并创建一个新项目。选择3D模板,并确保选择了Universal Windows Platform作为目标平台。 3. 配置项目设置:在Unity中,进入“Edit”菜单,然后选择“Project Settings”和“Player”。在Inspector窗口中,展开“Universal Windows Platform”选项卡,确保选择了正确的目标设备(Hololens 2)。 4. 导入Hololens 2的软件包:使用Unity的Package Manager导入Hololens 2的软件包,这将提供Hololens 2的功能和性能支持。 5. 创建场景和对象:使用Unity的编辑器创建场景,并向场景中添加所需的3D对象、UI元素和其他交互元素。 6. 调整摄像机设置:对于Hololens 2应用程序,摄像机设置非常重要。确保将摄像机设置为适应Hololens 2的视野范围和显示要求。 7. 添加MR功能:使用Hololens 2的软件包中提供的API和组件,添加MR功能,如手势识别、语音识别和空间映射等。 8. 进行测试和调试:在Unity引擎中,可以使用模拟器进行初步的测试和调试。但是最好在实际的Hololens 2设备上进行真实环境的测试。 9. 构建和部署应用程序:完成应用程序开发后,使用Unity引擎的构建工具将应用程序打包为Hololens 2所需的应用程序包(.appx)。然后,将该应用程序包部署到Hololens 2设备上进行使用。 希望这些步骤能够帮助你开始使用Unity开发Hololens 2的MR应用程序!如有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菌菌巧乐兹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值