网络温湿度测量控制系统

发布于:2023-01-11 ⋅ 阅读:(587) ⋅ 点赞:(0)

准备硬件

51c88613d9df656723ba512d8c32bff2.jpegdht11温湿度监测传感器

bcc1b8062d17df2469977f6da1a8b10d.jpeg

oled屏幕

6d1e9a84c89fa095b906dee26ad2df61.jpeg

2.2 基本硬件电路

2.2.1电源电路

6b7d7d59375968c539242729637a6a4e.jpeg

电源电路

   主要功能是将USB接口的5V电源电压通过VIN脚传入芯片,再通过VOUT脚输出转化为3.3V电源电压输出,从而保证STM32 F103 C8T6单片机核心板可以正常的供电,图 7中的C5、C6、C7、C8电容不仅可以阻断直流电的传输,还可以稳定输入输出的电压,防止其波动影响单片机的正常运行,称其为滤波。滤波工作是一项将输入信号输出中某个特定的波段频率干扰滤除后的一种操作,是系统抑制谐波和系统防止谐波干扰发生的一项的重要措施。

2.2.2复位电路

刚开始上电的时候,板上的电流会通过VSS接地,再为C20充电,这时NRST的引脚为低电平。当C20充满电后,C20就处于“断路”的状态,此时的NRST由低变成高电平。

cd2eafef658bc6b53758ccfdbaa5a92e.jpeg图2.8复位电路

2.2.3时钟电路

a713797497ed4557e6c6defe08fb19df.jpeg

图2.9时钟电路

控制流程设计

fbec5724c5362a82eb4b7a273ef1a4e4.jpeg

图2.10 网络温度测量控制系统流程图

软件设计

1a799219ab091f03ed5a7a5c76f1e306.jpeg

图3.1 串口通信的界面设计361c63d529af4510c6111a7b45134a1d.jpeg

图3.2 环境检测的界面设计

系统调试和成果展示

78b0aa6eabab46905eb16e3cb7145772.jpeg

图4.1 Keil5软件调试106e1ec5913ee20ab185f0c82e5bbd5b.jpeg

图4.2硬件电路板的调试

成果展示

图4.3通电通信后温度的实时数据

a07cc24a8703f5b66440eea38d9cbd07.jpeg

28c29958c0440610f84fbd3c32d9c34a.jpeg

图4.4上位机的实时数据

68f37f1a13de40843e8e466f944c0a73.jpeg

图4.5温湿度过高超出预设值报警

87e20d7c0dac49e066b4b73151f8491b.jpeg

图4.6上位机设定温湿度阈值

7ee97c826238a1cb7e07bae74dd12a06.jpeg

图4.7按钮对阈值的设定

本文配套源码  硬件原理图 论文等资料包

Keil5程序

#include "stm32f10x.h"

#include

#include "LED.h"

#include "delay.h"

#include "sys.h"

#include "usart.h"

#include "TIM.h"

#include "OLED.h"

#include "key.h"

#include "dht11.h"

int humi_value = 0;

int temp_value = 0;

int humi_max = 40;

inthumi_min = 20;

int temp_max = 35;

int temp_min = 20;

int Temp_flag = 0;

int Humi_flag = 0;

extern int warning;

int main(void)

{

     u8 Res;

  int key = 0;

  u8 dht_data[5] = {0};

  int key_flag = 0;

  NVIC_Configuration();  /*设置NVIC中断分组2:2位抢占优先级,2位响应优先级*/

  delay_init(); ///延时函数初始化

  uart_init(115200);

  LED_Init();

  OLED_Init();

  show_info();

  key_init();

     TIM1_Init();

     system_beep();

 while(1)

 {

  if(dht11_read_data(dht_data)) {

  humi_value = dht_data[23];/// 1.获取湿度的整数部分

  temp_value = dht_data[2];/// 2.获取温度的整数部分

//sprintf((char*)humi_str, "Temp:%d", humi_value);

      }

  if(USART_GetFlagStatus(USART1,USART_FLAG_RXNE))

  {

  Res =USART_ReceiveData(USART1);//读取接受到的数据

  if(Res == 'a'){

printf("|:%d:%d:%d:%d:\n",temp_max,temp_min,humi_max,humi_min);

   }else if(Res == 'b')

   {

    temp_max;

    }else if(Res == 'c')

    {

      temp_max--;

      show_info();

    }else if(Res == 'd')

    {

      temp_min++;

      show_info();

    }else if(Res == 'e')

    {

       temp_min--;

       show_info();

    }else if(Res == 'f')

    {

      humi_max

      show_info();

    }else if(Res == 'g')

    {

      humi_max--;

      show_info();

    }else if(Res == 'h')

    {

      humin++;

      show_info();

    }else if(Res == 'l')

    {

      humi_min--;

      show_info();

    }else if(Res == 'z')

    {

     warning = 0;

    }else if(Res == 'w')

    {

     warning = 1;

    }else if(Res == 'o') ///获取温度

    {

     printf("o:%d:\n",temp_value);

    }else if(Res == 'p') ///获取湿度

     printf("p:%d:\n",humi_value);

}

      key = key_scan(0);

if(key != 0){

 system_beep();

 switch(key)

 {

  case 1:

key_flag;

if(key_flag ==4) {key_flag = 0};

if(key_flag == 0){

    OLED_ShowString(3,5,":");

 OLED_ShowString(3,13," ");

 OLED_ShowString(4,5," ");

 OLED_ShowString(4,13," ");

 }else if(key_flag == 1)

{

 OLED_ShowString(3,5," ");

 OLED_ShowString(3,13,":");

 OLED_ShowString(4,5," ");

 OLED_ShowString(4,13," ");

 }else if(key_flag == 2)

 {

 OLED_ShowString(3,5," ");

 OLED_ShowString(3,13," ");

 OLED_ShowString(4,5,":");

 OLED_ShowString(4,13," ");

 }else if(key_flag == 3)

 {

  OLED_ShowString(3,5," ");

  OLED_ShowString(3,13," ");

  OLED_ShowString(4,5," ");

  OLED_ShowString(4,13,":");

  } break;

case 2:

  if(key_flag == 0) {

                               temp_max++;

  }else if(key_flag == 1)

  {

temp_min++;

  }else if(key_flag == 2)

  {

  humi_max++;

   }else if(key_flag == 3)

{

  humi_min++;

}printf("|:%d:%d:%d:%d:\n",temp_max,temp_min,humi_max,humi_min; break;

case 3:

if(key_flag == 0){

                               temp_max--;

}else if(key_flag == 1)

{

temp_min--;

}else if(key_flag == 2)

{

  humi_max--;

}else if(key_flag == 3)

{

  humi_min--;

}printf("|:%d:%d:%d:%d:\n",temp_max,temp_min,humi_max,humi_min); break;

      default:break;

}

}

if((humi_valuehumi_max)){

    Humi_LED_ON;

 Humi_flag = 1;

}else{

    Humi_flag = 0;

    Humi_LED_OFF;

}

if((temp_value>temp_max)||(temp_value<>

&nbsp;&nbsp;&nbsp;Temp_LED_ON;

&nbsp;Temp_flag = 1;

}else{

&nbsp;&nbsp;&nbsp;Temp_flag = 0;

&nbsp;&nbsp;&nbsp;Temp_LED_OFF;

}

delay_ms(200);

}

&nbsp;}

二、上位机串口通信程序主函数源代码:

#include "serialport.h"

#include "ui_serialport.h"

#include

SerialPort::SerialPort(QWidget *parent):

&nbsp;&nbsp;&nbsp;&nbsp;QWidget(parent),

&nbsp;&nbsp;&nbsp;&nbsp;ui(new Ui::SerialPort)

{

&nbsp;&nbsp;&nbsp;&nbsp;ui->setupUi(this);

&nbsp;&nbsp;&nbsp;&nbsp;ui->te_recv_text->append(tr("检测到端口列表:"));

&nbsp;&nbsp;&nbsp;&nbsp;foreach (const QSerialPortInfo &info,&nbsp;QSerialPortInfo::availablePorts())

&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QSerialPort serial_port;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;serial_port.setPort(info);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (serial_port.open(QIODevice::ReadWrite))

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->cb_com_port->addItem(info.portName());

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->te_recv_text->append(info.description());

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;serial_port.close();

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;ui->cb_baud_rate->setCurrentIndex(7);//默认115200

&nbsp;&nbsp;&nbsp;&nbsp;ui->pb_open_com->setText(tr("打开串口"));

&nbsp;&nbsp;&nbsp;&nbsp;ui->pb_send->setEnabled(false);

}

SerialPort::~SerialPort()

{

&nbsp;&nbsp;&nbsp;&nbsp;delete ui;

}

void SerialPort::sendInfo(QString info)

{

&nbsp;&nbsp;&nbsp;&nbsp;m_serialport->write(info.toLatin1());

}

void SerialPort::slotReadUsart(void)

{

&nbsp;&nbsp;&nbsp;&nbsp;QByteArray requestData = m_serialport->readAll();

&nbsp;&nbsp;&nbsp;&nbsp;QString str = QString::fromLatin1(requestData);

&nbsp;&nbsp;&nbsp;&nbsp;//qDebug() << "Recv:&nbsp;" <<>

&nbsp;&nbsp;&nbsp;&nbsp;ui->te_recv_text->append(tr(requestData));

&nbsp;&nbsp;&nbsp;&nbsp;emit signalSendInfo(str);

}

void SerialPort::on_pb_send_clicked()

{

&nbsp;&nbsp;&nbsp;&nbsp;QString msg = ui->le_send_text->text();

&nbsp;&nbsp;&nbsp;&nbsp;qDebug() << "Send:&nbsp;" << msg;

&nbsp;&nbsp;&nbsp;&nbsp;m_serialport->write(msg.toLatin1());

}

void SerialPort::on_pb_clear_clicked()

{

&nbsp;&nbsp;&nbsp;&nbsp;ui->te_recv_text->clear();

}

void SerialPort::on_pb_open_com_clicked()

{

&nbsp;&nbsp;&nbsp;&nbsp;if(ui->pb_open_com->text()==tr("打开串口"))

&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_serialport= new QSerialPort();

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_serialport->setPortName(ui->cb_com_port->currentText());

&nbsp;&nbsp;&nbsp;m_serialport->setBaudRate(ui->cb_baud_rate->currentText().toInt());

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch(ui->cb_crc_test->currentIndex())

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 0:&nbsp;m_serialport->setParity(QSerialPort::NoParity);break;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 1:&nbsp;m_serialport->setParity(QSerialPort::OddParity);break;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 2:&nbsp;m_serialport->setParity(QSerialPort::EvenParity);break;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:&nbsp;break;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch(ui->cb_data_bit->currentIndex())

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 0:&nbsp;m_serialport->setDataBits(QSerialPort::Data8);break;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 1:&nbsp;m_serialport->setDataBits(QSerialPort::Data7);break;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 2:&nbsp;m_serialport->setDataBits(QSerialPort::Data6);break;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:&nbsp;break;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch(ui->cb_stop_bit->currentIndex())

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 0:&nbsp;m_serialport->setStopBits(QSerialPort::OneStop);break;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 1:&nbsp;m_serialport->setStopBits(QSerialPort::TwoStop);break;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:&nbsp;break;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_serialport->setFlowControl(QSerialPort::NoFlowControl);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connect(m_serialport,SIGNAL(readyRead()),

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this,SLOT(slotReadUsart()));

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->cb_com_port->setEnabled(false);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->cb_baud_rate->setEnabled(false);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->cb_crc_test->setEnabled(false);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->cb_data_bit->setEnabled(false);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->cb_stop_bit->setEnabled(false);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->lb_statu_flag->setStyleSheet("background-color:red");

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->pb_open_com->setText(tr("关闭串口"));

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->pb_send->setEnabled(true);sendInfo("a");

&nbsp;&nbsp;&nbsp;&nbsp;}else{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_serialport->clear();

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_serialport->deleteLater();

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->cb_com_port->setEnabled(true);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->cb_baud_rate->setEnabled(true);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->cb_crc_test->setEnabled(true);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->cb_data_bit->setEnabled(true);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->lb_statu_flag->setStyleSheet("background-color:rgb(130,130,130)");

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->pb_open_com->setText(tr("打开串口"));

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->pb_send->setEnabled(false);

&nbsp;&nbsp;&nbsp;&nbsp;}

}

void SerialPort::on_pb_beep_clicked()

{

&nbsp;&nbsp;&nbsp;&nbsp;if(ui->pb_beep->text() == "Beep On")

&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_serialport->write("K");

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->pb_beep->setText("Beep Off");

&nbsp;&nbsp;&nbsp;&nbsp;}else{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_serialport->write("W");

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->pb_beep->setText("Beep On");

&nbsp;&nbsp;&nbsp;&nbsp;}

}

三、上位机环境检测程序:

#include "monitor.h"

#include "ui_monitor.h"

#include

#include

Monitor::Monitor(QWidget *parent):

&nbsp;&nbsp;&nbsp;&nbsp;QWidget(parent),

&nbsp;&nbsp;&nbsp;&nbsp;ui(new Ui::Monitor)

{

&nbsp;&nbsp;&nbsp;&nbsp;ui->setupUi(this);

&nbsp;&nbsp;&nbsp;&nbsp;waring_flag = 0;

&nbsp;&nbsp;&nbsp;&nbsp;m_Tmax = 0;

&nbsp;&nbsp;&nbsp;&nbsp;m_Tmin = 0;

&nbsp;&nbsp;&nbsp;&nbsp;m_Hmax = 0;

&nbsp;&nbsp;&nbsp;&nbsp;m_Hmin = 0;

&nbsp;&nbsp;&nbsp;&nbsp;m_temp = 0;

&nbsp;&nbsp;&nbsp;&nbsp;m_humi = 0;

&nbsp;&nbsp;&nbsp;&nbsp;m_TempWarn.clear();

&nbsp;&nbsp;&nbsp;&nbsp;m_HumiWarn.clear();

&nbsp;&nbsp;&nbsp;&nbsp;m_tempTimer = new QTimer(this);

&nbsp;&nbsp;&nbsp;&nbsp;m_humiTimer = new QTimer(this);

&nbsp;&nbsp;&nbsp;&nbsp;connect(ui->widget,SIGNAL(signalSendInfo(QString)),

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this,SLOT(slotSerialInfo(QString)));

&nbsp;&nbsp;&nbsp;&nbsp;connect(m_tempTimer,&nbsp;SIGNAL(timeout()),

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this,&nbsp;SLOT(slotTimeOutTemp()));

&nbsp;&nbsp;&nbsp;&nbsp;connect(m_humiTimer,&nbsp;SIGNAL(timeout()),

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this,&nbsp;SLOT(slotTimeOutHumi()));

}

Monitor::~Monitor()

{

&nbsp;&nbsp;&nbsp;&nbsp;delete ui;

}

void Monitor::slotSerialInfo(QString str)

{

&nbsp;&nbsp;&nbsp;&nbsp;qDebug()<<>

&nbsp;&nbsp;&nbsp;&nbsp;QStringList list = str.split(":");

&nbsp;&nbsp;&nbsp;&nbsp;if(list.at(0) == "|")

&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_Tmax = list.at(1).toInt();

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_Tmin = list.at(2).toInt();

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_Hmax = list.at(3).toInt();

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_Hmin = list.at(4).toInt() ;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->lcd_humiMaxV->display(m_Hmax);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->lcd_humiMinV->display(m_Hmin);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->lcd_tempMaxV->display(m_Tmax);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->lcd_tempMinV->display(m_Tmin);

&nbsp;&nbsp;&nbsp;&nbsp;}else if(list.at(0) == "o")

&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_temp = list.at(1).toInt();

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->lcd_tempV->display(m_temp);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((m_tempm_Tmax))

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_TempWarn = "温度异常";

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_TempWarn.clear();

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->lb_warn->setText("警告:"+m_TempWarn+" "+m_HumiWarn);

&nbsp;&nbsp;&nbsp;&nbsp;}else if(list.at(0) == "p")

&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_humi = list.at(1).toInt();

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->lcd_humiV->display(m_humi);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((m_humim_Hmax))

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_HumiWarn = "湿度异常";

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_HumiWarn.clear();

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->lb_warn->setText("警告:"+m_TempWarn+" "+m_HumiWarn);

&nbsp;&nbsp;&nbsp;&nbsp;}

}

void Monitor::on_pb_erasure_clicked()

{

&nbsp;&nbsp;&nbsp;&nbsp;if(waring_flag == 0)

&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;waring_flag = 1;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->pb_erasure->setText("开启");

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->widget->sendInfo("w");

&nbsp;&nbsp;&nbsp;&nbsp;}else{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;waring_flag = 0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->pb_erasure->setText("关闭");

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->widget->sendInfo("z");

&nbsp;&nbsp;&nbsp;&nbsp;}

}

void Monitor::on_pb_tempMaxVAdd_clicked()

{

&nbsp;&nbsp;&nbsp;&nbsp;m_Tmax++;

&nbsp;&nbsp;&nbsp;&nbsp;ui->lcd_tempMaxV->display(m_Tmax);

&nbsp;&nbsp;&nbsp;&nbsp;ui->widget->sendInfo("b");

}

void Monitor::on_pb_tempMaxVSub_clicked()

{

&nbsp;&nbsp;&nbsp;&nbsp;m_Tmax--;

&nbsp;&nbsp;&nbsp;&nbsp;ui->lcd_tempMaxV->display(m_Tmax);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->widget->sendInfo("c");

}

void Monitor::on_pb_tempMinVAdd_clicked()

{

&nbsp;&nbsp;&nbsp;&nbsp;m_Tmin++;

&nbsp;&nbsp;&nbsp;&nbsp;ui->lcd_tempMinV->display(m_Tmin);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->widget->sendInfo("d");

}

void Monitor::on_pb_tempMinVSub_clicked()

{

&nbsp;&nbsp;&nbsp;&nbsp;m_Tmin--;

&nbsp;&nbsp;&nbsp;&nbsp;ui->lcd_tempMinV->display(m_Tmin);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->widget->sendInfo("e");

}

void Monitor::on_pb_humiMaxVAdd_clicked()

{

&nbsp;&nbsp;&nbsp;&nbsp;m_Hmax++;

&nbsp;&nbsp;&nbsp;&nbsp;ui->lcd_humiMaxV->display(m_Hmax);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->widget->sendInfo("f");

}

void Monitor::on_pb_humiMaxVSub_clicked()

{

&nbsp;&nbsp;&nbsp;&nbsp;m_Hmax--;

&nbsp;&nbsp;&nbsp;&nbsp;ui->lcd_humiMaxV->display(m_Hmax);

&nbsp;&nbsp;&nbsp;&nbsp;ui->widget->sendInfo("g");

}

void Monitor::on_pb_humiMinVAdd_clicked()

{

&nbsp;&nbsp;&nbsp;&nbsp;m_Hmin++;

&nbsp;&nbsp;&nbsp;&nbsp;ui->lcd_humiMinV->display(m_Hmin);

&nbsp;&nbsp;&nbsp;&nbsp;ui->widget->sendInfo("h");

}

void Monitor::on_pb_humiMinVSub_clicked()

{

&nbsp;&nbsp;&nbsp;&nbsp;m_Hmin--;

&nbsp;&nbsp;&nbsp;&nbsp;ui->lcd_humiMinV->display(m_Hmin);

&nbsp;&nbsp;&nbsp;&nbsp;ui->widget->sendInfo("l");

}

void Monitor::slotTimeOutTemp(void)

{

&nbsp;&nbsp;&nbsp;&nbsp;ui->widget->sendInfo("o");

}

void Monitor::slotTimeOutHumi(void)

{

&nbsp;&nbsp;&nbsp;&nbsp;ui->widget->sendInfo("p");

}

void Monitor::on_pb_tempStart_clicked()

{

&nbsp;&nbsp;&nbsp;&nbsp;if(m_tempTimer->isActive())

&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_tempTimer->stop();

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->pb_tempStart->setText("开启");

&nbsp;&nbsp;&nbsp;&nbsp;}else

&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_tempTimer->start(ui->sb_tempInterval->value()*1000);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->pb_tempStart->setText("停止");

&nbsp;&nbsp;&nbsp;&nbsp;}

}

void Monitor::on_pb_humiStart_clicked()

{

&nbsp;&nbsp;&nbsp;&nbsp;if(m_humiTimer->isActive())

&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_humiTimer->stop();

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->pb_humiStart->setText("开启");

&nbsp;&nbsp;&nbsp;&nbsp;}else

&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_humiTimer->start(ui->sb_humiInterval->value()*1000);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ui->pb_humiStart->setText("停止");

&nbsp;&nbsp;&nbsp;&nbsp;}

}

本文配套源码  硬件原理图 论文等资料包 


网站公告

今日签到

点亮在社区的每一天
去签到