Unity 中控(一)

news/2024/10/25 20:29:08/

项目上有需求要控制投影机一键开和关,在主控主机上写一个中控软件控制,在网上查了一些资料,投影机都可通过串口线来控制(部分可以用网口控制),这里我用的是串口控制,首先要拿到投影机的中控代码,直接找厂商要,公司用的是松下的PT-X3270,下面是中控代码。

串口9针头
3是接收,2是发送,5是接地波 特 率:19200bps
数 据 位:8位
停 止 位:1位
奇偶校验:无
同步方式:不同步
X参数:无
S参数:无
投影机开:02504F4E03
投影机关:02504F4603
电  脑1:024949533A52473103
电  脑2:024949533A52473203
视    频:024949533A56494403
H D M I:024949533A48443103

有了中控代码就很简单了,剩下的就是利用串口发数据了,关于串口就不多说了,网上很多。考虑到可能会控制不同型号的投影机,决定用XML来配置一些参数,要用到的重要参数也就3个,一个是波特率,不同型号的波特率可能会不一样,然后就是投影开关的串口数据了,这次用到两种型号的投影。

在这里插入图片描述
写一个存投影机数据的类

public class DataConfig
{public int id;public string portName;public int baudRate;public string openStr;public string closeStr;public DataConfig(XmlElement element){id = int.Parse(element.GetAttribute("id"));portName = element.GetAttribute("portName");baudRate = int.Parse(element.GetAttribute("baudRate"));openStr = element.GetAttribute("openStr");closeStr = element.GetAttribute("closeStr");}
}

废话不多说了,下面就是xml的读取,和串口发送数据了,直接上代码。

public class PortCtrl_2 : MonoBehaviour
{private string portName = "COM14";private int baudRate = 9600;//波特率private Parity parity = Parity.None;//奇偶校验private int dataBits = 8;//数据位private StopBits stopBits = StopBits.One;//停止位private string openStr = "02504F4E03";private string closeStr = "02504F4603";private Button btn_1_open;private Button btn_1_close;private Button btn_2_open;private Button btn_2_close;private DataConfig[] datas = new DataConfig[2];private SerialPort[] ports = new SerialPort[2];private string xmlPath;private void Start(){xmlPath = Application.streamingAssetsPath + "/ctrl2.xml";LoadXml(xmlPath);OpenPort();//投影1--18btn_1_open = GameObject.Find("Canvas/BG/View1/Open").GetComponent<Button>();btn_1_open.onClick.AddListener(() => WriteData(ports[0], datas[0].openStr));btn_1_close = GameObject.Find("Canvas/BG/View1/Close").GetComponent<Button>();btn_1_close.onClick.AddListener(() => WriteData(ports[0], datas[0].closeStr));//投影4-1--4-4btn_2_open = GameObject.Find("Canvas/BG/View2/Open").GetComponent<Button>();btn_2_open.onClick.AddListener(() => WriteData(ports[1], datas[1].openStr));btn_2_close = GameObject.Find("Canvas/BG/View2/Close").GetComponent<Button>();btn_2_close.onClick.AddListener(() => WriteData(ports[1], datas[1].closeStr));}private void OpenPort(){for (int i = 0; i < datas.Length; i++){SerialPort port = ports[i];ports[i] = new SerialPort("\\\\.\\" + datas[i].portName, datas[i].baudRate, parity, dataBits, stopBits);ports[i].ReadTimeout = 400;ports[i].WriteTimeout = 400;try{ports[i].Open();Debug.Log("打开串口......");}catch (Exception ex){Debug.Log(ex.Message);}}}private void ClosePort(){try{//关闭串口和接收线程for (int i = 0; i < ports.Length; i++){if (ports[i].IsOpen){ports[i].Close();}}}catch (Exception ex){Debug.Log(ex.Message);}}private void WriteData(SerialPort port, string str){if (port.IsOpen){byte[] array = strToHexByte(str);port.Write(array, 0, array.Length);}}private void OnApplicationQuit(){ClosePort();}private void Open(SerialPort port){WriteData(port, openStr);}private void Close(SerialPort port){WriteData(port, closeStr);}private void LoadXml(string path){if (File.Exists(xmlPath)){XmlDocument xmlDoc = new XmlDocument();xmlDoc.Load(path);XmlNodeList list = xmlDoc.SelectSingleNode("dataConfig").ChildNodes;XmlElement element1 = list[0] as XmlElement;portName = element1.GetAttribute("portName");for (int i = 0; i < datas.Length; i++){XmlElement element = list[i] as XmlElement;datas[i] = new DataConfig(element);}}}//16进制字符串转字节数组private byte[] strToHexByte(string hexString){hexString = hexString.Replace(" ", "");if ((hexString.Length % 2) != 0)hexString += " ";byte[] returnBytes = new byte[hexString.Length / 2];for (int i = 0; i < returnBytes.Length; i++)returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);return returnBytes;}//字节数组转16进制字符串public static string byteToHexStr(byte[] bytes){string returnStr = "";if (bytes != null){for (int i = 0; i < bytes.Length; i++){returnStr += bytes[i].ToString("X2");}}return returnStr;}
}

http://www.ppmy.cn/news/671587.html

相关文章

二代身份证读取 中控ID180 二三代身份证阅读器 Vue版本

二代身份证读取 中控ID180 二三代身份证阅读器 Vue版本 设备 设备名称&#xff1a;台式身份证阅读机 产品型号&#xff1a;ID180 设备驱动和文档 链接&#xff1a;https://pan.baidu.com/s/1nAYkby0smJPSfUcpPVNiLw 提取码&#xff1a;zhuu Vue读取身份证信息 得提前安装好…

汽车中控linux系统,特斯拉的中控系统为什么是Linux而不是Android?

特斯拉的中控系统为什么是Linux而不是Android? 牛车网网友阿尔法 答: 这个问题回答起来其实很简单,总的来说就是Tesla为了避免受限于Android,免于以后自己发展好了还要在对方的土地上施肥,帮别人种地,说不好还被Alphabet收购了那就不好玩了,这不是Musk的做事风格。 不过…

中控门禁无法添加设备,提示表结构不存在或接收超时

下午供应商给我打通话说新安装了10几个门禁机&#xff0c;但无法添加到现在的门禁管理系统&#xff0c;用他们测试的门禁系统机器可以正常添加的。 折腾一个下午排查网络问题&#xff0c;后来注意到可能是软件版本的问题。 网上有说可能是门禁机固件版本比较高&#xff0c;要升…

6、多层感知机:数值稳定性和模型初始化

1、数值稳定性 考虑一个具有 L L L层、输入 x \mathbf{x} x和输出 o \mathbf{o} o的深层网络。每一层 l l l由变换 f l f_l fl​定义&#xff0c;该变换的参数为权重 W ( l ) \mathbf{W}^{(l)} W(l)&#xff0c;其隐藏变量是 h ( l ) \mathbf{h}^{(l)} h(l)&#xff08;令 h …

Unity 中控(二)

前面写到控制投影&#xff0c;接着就是对电脑的开关的控制&#xff0c;依然是先到网上查资料&#xff0c;然后总结下&#xff0c;&#xff08;在同一局域网下&#xff09;远程开电脑是同通过网卡的Mac地址&#xff0c;UDP广播数据实现开机&#xff0c;关机是调用系统的运行命令…

特斯拉model3中控屏怎么关_全方位解读特斯拉 Model 3中控大屏交互布局

前边我们讲述了手机UI和车载UI的设计差异。今天我们来聊一聊特斯拉最新的车型 Model 3的中控大屏&#xff0c;这是一块具有标志性意义的中控设计。Model 3 的HMI堪称是对汽车行业的一个颠覆性作品&#xff0c;车内采用了极简的内饰设计基本取消的硬件按钮操作&#xff0c;甚至在…

汽车中控屏显示com点android,手机映射车载中控屏方法 手机映射功能详解

用usb数据线的两端连接上手机和中控&#xff0c;连接成功后就能够映射到车载中控屏上了&#xff0c;车载蓝牙和手机蓝牙匹配成功后也能够映射到车载中控屏上&#xff0c;手机打开热点&#xff0c;中控连接上热点也可以映射到车载中控屏。 手机映射功能 汽车手机映射是通过车机上…

中控OPC系统服务器,OPC Server For SUPCON(浙大中控)

原标题:OPC Server For SUPCON(浙大中控) ForeverCredit OPC Server服务器软件,简称OPCServer,是北京华恒信远针对企业生产过程中所涉及到的各种DCS、PLC、组态软件、电力综合自动化等控制系统、测量系统、其它辅助生产的设备和软件系统自主研发的标准OPC接口,为第三方应用…