C# 串口类SerialPort的使用方法
序言:最近做了一个智能体育项目——跆拳道积分系统,硬件部分会向软件传入振动值等数据,链接方式为串口,所以用到SerialPort类。
值得注意的是:
DataReceived 方法,当串口缓冲区有数据时执行该方法。
ReceivedBytesThreshold属性决定了当串口读缓存中数据多少个时才触发DataReceived事件,默认为1。串口接收的指令可能是错误值,所以这块根据自己需求进行设置。
首先需要引用SerialPort
using System.IO.Ports;
创建全局串口对象
SerialPort com;
SerialPort配置,并打开端口进行接收数据
private void Form1_Load(object sender, EventArgs e) { com = new SerialPort("COM5"); //实例化SerialPort并设置COM口 com.BaudRate = 115200;//波特率 com.Parity = Parity.None;//无奇偶校验位 com.StopBits = StopBits.Two;//两个停止位 com.Handshake = Handshake.RequestToSend;//控制协议 com.ReceivedBytesThreshold = 13;//设置 DataReceived 事件发生前内部输入缓冲区中的字节数,我这里是13字节为一组 com.Open(); //打开串口 com.DataReceived += new SerialDataReceivedEventHandler(Com_DataReceived); //接受数据线程 }
/// <summary> /// 监听串口数据线程 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Com_DataReceived(object sender, SerialDataReceivedEventArgs e) { try { if (com.IsOpen) { byte[] readBuffer = new byte[com.ReadBufferSize + 1]; try { int count = com.Read(readBuffer, 0, com.ReadBufferSize); //读取串口数据(监听) //String SerialIn = System.Text.Encoding.ASCII.GetString(readBuffer, 0, count); if (count != 0) { //将返回值byte数组转换为string类型数据 String result = bytesToHexString(readBuffer); //这里强调一下,线程里不可以直接对UI进行赋值 this.BeginInvoke(new System.Threading.ThreadStart(delegate () { textBox1.Text = result; //对控件进行赋值 })); } } catch (TimeoutException) { } } else { TimeSpan waitTime = new TimeSpan(0, 0, 0, 0, 50); Thread.Sleep(waitTime); } } catch (Exception ex) { } }
Byte数组转换成16进制方法
/// <summary> /// Byte数组转换成16进制 /// </summary> /// <param name="bArr"></param> /// <returns></returns> String bytesToHexString(byte[] bArr) { string result = string.Empty; for (int i = 0; i < 13; i++)//逐字节变为16进制字符,以%隔开 { result += Convert.ToString(bArr[i], 16).ToUpper().PadLeft(2, '0') + " "; } return result; }
发送数据
/// <summary> /// 发送数据 /// </summary> void SendData() { Byte[] TxData = { 1, 2, 3, 4, 5, 6, 7, 8 }; com.Write(TxData, 0, 8); }
到这里就结束了,网上也有一些测试串口数据的程序,我这也有一个但是不记得在哪里下载的了,如果有需要跟我吱一声~
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
微服务实战之春云与刀客(五)—— spring cloud与docker swarm集群
概述 微服务与docker结合是必然的趋势,本文介绍spring cloud与docker swarm集群实现微服务极简部署,不需要编写Dockerfile,不需要docker-compose编排容器。上一篇文章已经介绍了docker swarm的环境搭建,这里不再叙述。主要包含步骤: 结合maven docker 插件直接编译jar 包,生成和推送应用镜像。 通过docker swarm 命令创建服务。 线下和线上结合,自动化部署 制作java基础镜像 java镜像是spring boot应用的基础,这里基于openjdk:8,加入了时区,制作成了openjdk-tiejia:8 新建Dockerfile FROM openjdk:8 RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ echo 'Asia/Shanghai' >/etc/timezone 生成镜像docker build -t 192.168.0.37:5000/openjdk-tiejia:8 推送docker push ...
- 下一篇
给妹子讲python-S01E04容器遍历和列表解析式
【要点抢先看】 1.遍历容器的基本方法2.列表解析式和字典解析式的用法【妹子问】前面三集我们学习了三种基本的容器,现在我有一个疑问,我们如何依次访问容器中的所有元素呢? 好问题,那这一集我们就初步学习如何遍历这些容器。 这个容易,python里也用for语句,但用起来比C语言里的语法更简洁一些,我们看看列表迭代的例子: for x in [1,2,3]: print(x) 1 2 3 字典因为涉及到键和值两个元素,稍微有一些不同,我们举两个常用的方法 第一种方法,通过遍历键来索引对应的值 D = {'a':1, 'c':2, 'b':3} for k in D: print('{}--->{}'.format(k,D[k])) c--->2 a--->1 b--->3 再说说第二种方法。 用字典的it
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- 2048小游戏-低调大师作品
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Red5直播服务器,属于Java语言的直播服务器
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7