基于qt dh11传感器(三个引脚)获取温湿度代码显示在ui界面上
时间: 2023-12-13 17:04:02 浏览: 197
好的,以下是基于Qt和DHT11传感器的温湿度获取代码:
首先,你需要安装Qt串口调试工具库QSerialPort,可以通过Qt的包管理器进行安装。
接着,创建一个新的Qt Widgets应用程序项目,并在主窗口的.ui文件中添加两个QLabel控件分别用于显示温度和湿度值,以及一个QPushButton控件用于触发获取温湿度操作。
在主窗口的头文件中添加以下代码:
```
#include <QMainWindow>
#include <QSerialPort>
#include <QSerialPortInfo>
#include <QTimer>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_pushButton_clicked();
void readSerialData();
private:
Ui::MainWindow *ui;
QSerialPort *serialPort;
QTimer *timer;
};
```
在主窗口的源文件中添加以下代码:
```
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 初始化串口
serialPort = new QSerialPort();
serialPort->setPortName("COM3"); // 根据实际情况修改串口名称
serialPort->setBaudRate(QSerialPort::Baud9600);
serialPort->setDataBits(QSerialPort::Data8);
serialPort->setParity(QSerialPort::NoParity);
serialPort->setStopBits(QSerialPort::OneStop);
serialPort->setFlowControl(QSerialPort::NoFlowControl);
// 初始化定时器
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(readSerialData()));
}
MainWindow::~MainWindow()
{
delete ui;
if (serialPort->isOpen()) {
serialPort->close();
}
delete serialPort;
}
void MainWindow::on_pushButton_clicked()
{
if (serialPort->isOpen()) {
serialPort->close();
}
if (serialPort->open(QIODevice::ReadWrite)) {
ui->statusBar->showMessage(tr("Connected to serial port %1").arg(serialPort->portName()));
timer->start(2000); // 每2秒读取一次温湿度数据
} else {
ui->statusBar->showMessage(tr("Failed to connect to serial port %1").arg(serialPort->portName()));
}
}
void MainWindow::readSerialData()
{
QByteArray data = serialPort->readAll();
if (data.size() == 5 && data.at(0) == 0x01) { // 判断数据格式是否正确
int temp = data.at(1) * 256 + data.at(2);
int humi = data.at(3) * 256 + data.at(4);
ui->label_temp->setText(tr("Temperature: %1°C").arg(temp / 10.0));
ui->label_humi->setText(tr("Humidity: %1%").arg(humi / 10.0));
}
}
```
其中,on_pushButton_clicked()槽函数用于连接串口并启动定时器,readSerialData()槽函数用于读取串口数据并显示温湿度值。
最后,编译并运行程序,点击按钮即可获取温湿度数据。
阅读全文