c# 从0实现一个温湿度监测的小工具 (4)

281 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第6天,点击查看活动详情

之前我们已经实现了一个简单的温湿度监测小工具。这一章我们将会对小工具进行优化。 主要优化点如下:\

  • 自动搜索电脑串口
  • 增加串口参数配置
  • 增加传感器地址配置

1. 页面修改

在之前章节中,我们实现了对串口的封装,包含一个api -> V_ScanPort,那么实现串口扫描的函数已经实现。我们需要再我们的主窗口的load函数中,增加对scan函数的调用。实现软件启动自动扫描串口。
1.1 修改页面,增加串口扫描combox
1.2 修改页面,增加波特率combox
1.3 修改页面,增加配置按钮
1.4 修改页面,增加一个textbox,用来表示传感器地址
以上修改完毕如下:

image.png

我们将页面修改为如图所示,将之前的groupbox移到右边,左边新增一个groupbox。取名串口配置; 增加两个combox,一个按钮,一个输入框。

2. 修改代码

2.1 在load函数中,增加对两个combox的初始化

2.1.1增加对串口的扫描和初始化

            //扫描串口
            string[] comlist = ComPort.V_ScanPort();
            if (comlist.Length < 1)
            {
                MessageBox.Show("没有扫描到串口,请检查硬件连接");
                return;
            }
            else 
            {
                foreach (string name in comlist)
                {
                    this.comboBox1.Items.Add(name);
                }
            }

2.2.2 增加波特率初始化
波特率默认选择,4800,9600,115200常用的三种,如有需求,自己可以新增

            //波特率初始化
            this.comboBox1.Items.Add("4800");
            this.comboBox1.Items.Add("9600");
            this.comboBox1.Items.Add("115200");

2.2.3 增加默认传感器地址\

             //默认地址
            this.textBox1.Text = "01";

修改完毕后,load函数如下:

       private void Form1_Load(object sender, EventArgs e)
        {
            //扫描串口
            string[] comlist = ComPort.V_ScanPort();
            if (comlist.Length < 1)
            {
                MessageBox.Show("没有扫描到串口,请检查硬件连接");
                return;
            }
            else 
            {
                foreach (string name in comlist)
                {
                    this.comboBox1.Items.Add(name);
                }
            }
            //波特率初始化
            this.comboBox2.Items.Add("4800");
            this.comboBox2.Items.Add("9600");
            this.comboBox2.Items.Add("115200");
            //默认地址
            this.textBox1.Text = "01";
        }

2.2.4 增加配置按钮的回调
主要逻辑获取当前的配置,然后打开串口,上代码

        /// <summary>
        /// 配置确定按钮回调
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                //串口
                string comname = this.comboBox1.Text;
                //波特率
                int baudrate = int.Parse(this.comboBox2.Text);
                //打开串口
                Runport = ComPort.V_OpenPort8N1(comname,baudrate);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.StackTrace +"\r\n"+ ex.Message);
            }
        }

2.2.5 修改读取数据按钮函数如下

        /// <summary>
        /// 获取温湿度数据
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonget_Click(object sender, EventArgs e)
        {
            if (Runport.IsOpen)
            {
                //获取地址
                byte addr = byte.Parse(this.textBox1.Text);
                //string ret = THSensor.ReadTHDataFromSensor(Runport, 0x03);
                string ret = THSensor.ReadTHDataFromSensor(Runport, addr);
                if (!string.IsNullOrEmpty(ret))
                {
                    string temp = ret.Split('&')[0];
                    string humi = ret.Split('&')[1];
                    //赋值
                    textboxhumi.Text = humi;
                    textboxtemp.Text = temp;
                }
                else
                {
                    MessageBox.Show("无数据,请检查配置参数");
                }
            }
            else
            {
                MessageBox.Show("串口没有打开");
            }
        }

编译测试 运行后我们可以看到已经自动扫描出电脑的两个串口,如图:

image.png

修改我们的传感器地址,03,然后点击确定,然后点击获取温湿度

image.png

下一节,我会为我们的软件增加工具栏&&增加日志记录功能。