C# 模拟温室大棚控制系统

                21物联网应用技术2班-陈林燕

目录

前言        

需求概述

使用示例


前言        

        模拟温室大棚控制系统是一种实时监测和控制温室环境的系统。该系统可以自动读取当前温度,并模拟灯光、喷灌和通风功能等,以确保温室环境处于最佳状态。本文将介绍该系统的需求和C#代码实现。


需求概述

        该系统需要采用串口和上位机进行数据通信,以获取当前温度。此外,还需要模拟LED灯光、喷灌和通风功能,以保持温室环境的最佳状态。具体要求如下:

        1. 通过串口和上位机进行数据通信
        系统需要通过串口与上位机进行数据通信。上位机将向系统发送查询请求,系统将返回当前温度数据。
        2. 读取环境温度数据
        系统需要实时读取环境温度数据,以决定是否需要进行喷灌、通风或调整灯光。
        3. 使用LED灯模拟温室采光
        系统需要模拟LED灯光,以模拟温室采光。灯光的亮度应该可以根据环境温度进行调整。
        4. 使用两个风扇模拟喷灌、通风功能
        系统需要使用两个风扇来模拟喷灌和通风功能。当环境温度过高时,系统应该自动开启风扇进行通风。


使用示例

          简单绘制一个界面。(此步骤略过)

 

        实例化一个串口

  SerialPort serialPort1 = new SerialPort();

        封装打开、关闭串口的方法

        private void UserOpenSerialPort()
        {
            //设置串口号
            serialPort1.PortName = cmb_SerialPortName.Text;
            //打开串口
            serialPort1.Open();
            //判断串口是否打开成功
            if (serialPort1.IsOpen == true)
            {
                serial_open_state = true;
                //修改打开按钮显示文本
                btn_open.Text = "关闭串口";
                //输出提示信息
             
                //禁用控件
                cmb_SerialPortName.Enabled = false;
                comboBox2.Enabled = false;
            }
            else
            {
                //输入提示信息
              
            }
        }

        private void UserCloseSerialPort()
        {
            //关闭串口
            serialPort1.Close();
            //更新串口状态
            serial_open_state = false;
            //修改打开按钮显示文本
            btn_open.Text = "打开串口";
            //输出提示信息
         
            //使能控件
            cmb_SerialPortName.Enabled = true;
            comboBox2.Enabled = true;
        }

       向串口传递数据(上位机需要发送的数据,需要根协议而定,博主只是提供参考方式)

  void SendDate(byte [] data)
        {
            serialPort1.Write(data, 0, data.Length);
        }

        串口回调事件

 private void SerialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            //Console.WriteLine("串口接收事件");
            //获取接收缓冲区中的字节个数
            int n = serialPort1.BytesToRead;
            byte[] data = new byte[n];
            if(n > 0)
            {
                serialPort1.Read(data, 0, n);
                UserRecSerialPortData(data);
                greenhouse.ReceivedRawData(data);


            }
        }

点击“打开串口”

 private void btn_open_Click(object sender, EventArgs e)
        {
            if(serial_open_state ==true)
            {
                UserCloseSerialPort(); 
            }
            else
            {
                //打开串口
                //判断串口号是否为空
                if (cmb_SerialPortName.Text == "" || cmb_SerialPortName.Text == null)
                {
                    MessageBox.Show("串口号为空");
                    return;
                }

                //设置串口号
                serialPort1.PortName = cmb_SerialPortName.Text;
                //设置波特率
                serialPort1.BaudRate = Convert.ToInt32(comboBox2.Text );
                
                UserOpenSerialPort();
            }
        }

开启/关闭 通风

  private void button2_Click_1(object sender, EventArgs e)
        {
            if (button2.Text == "开启通风")
            {
                greenhouse.SetFanSate(6000);
                button2.Text = "关闭通风";
            }
            else
            {
                greenhouse.SetFanSate(0);
                button2.Text = "开启通风";
            }
        }

开启/关闭 采光

        private void button3_Click_1(object sender, EventArgs e)
        {
            if (button3 .Text == "开启灯光")
            {
                greenhouse.SetLedSate(6000);
                button3.Text = "关闭灯光";
            }
            else
            {
                greenhouse.SetLedSate(0);
                button3.Text = "开启灯光";
            }
        }

读取温度

   private void button4_Click(object sender, EventArgs e)
        {
            int temp = greenhouse.ReadTemperature();
            label4.Text = temp.ToString() + "°C";
            if (button4.Text == "开启读取温度")
            {
                greenhouse.ReadTemperature();
                button4.Text = "关闭读取温度";
            }
            else
            {
                greenhouse.ReadTemperature();
                button4.Text = "开启读取温度";
                
            }
        }
                                          
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值