乐居管家综合项目(QT/C++)

//乐居管家//
/guard.h
#ifndef GUARD_H
#define GUARD_H

#include <QWidget>

class Mainwindow;
namespace Ui {
class guard;
}

class guard : public QWidget
{
    Q_OBJECT

public:
    explicit guard(QWidget *parent = nullptr);
    ~guard();

private slots:
    void on_guard_withdraw_clicked();

private:
    Ui::guard *ui;
};

#endif // GUARD_H

//internectClient.h
#ifndef INTERNECTCLIENT_H
#define INTERNECTCLIENT_H

#include <QWidget>
#include <QAbstractSocket>
#include <QTcpSocket>
#include <QRandomGenerator>
#include <QDebug>
#include <QString>


//add
// 协议常量
#define PROTOCOL_HEADER       0xAAAA     // 数据头(2字节)
#define PROTOCOL_FOOTER       0x5555     // 数据尾(2字节)
#define PROTOCOL_ADDR_PROPERTY 0x10      // 物业地址
#define PROTOCOL_ADDR_USER1    0x01      // 用户1地址
#define PROTOCOL_ADDR_USER2    0x02      // 用户2地址
#define PROTOCOL_ADDR_USER3    0x03      // 用户3地址
#define PROTOCOL_FUNC_GET_TEMP 0x40      // 获取温度
#define PROTOCOL_FUNC_GET_HUMI 0x41      // 获取湿度
#define PROTOCOL_FUNC_GET_SERVO 0x42     // 获取舵机信息

// 协议结构体,发送
typedef struct {
    uint16_t header;          // 数据头 0xAAAA
    uint8_t address;          // 地址
    uint8_t func_code;        // 功能码
    uint8_t data_len;         // 数据长度
    uint8_t *data;            // 数据指针
    uint8_t crc;              // CRC校验
    uint16_t footer;          // 数据尾 0x5555
} Protocol_Packet;

// 接收状态枚举
typedef enum {
    STATE_HEADER_HIGH,    // 等待数据头高字节
    STATE_HEADER_LOW,     // 等待数据头低字节
    STATE_ADDRESS,
    STATE_FUNC_CODE,
    STATE_DATA_LEN,
    STATE_DATA,
    STATE_CRC,
    STATE_FOOTER_HIGH,    // 等待数据尾高字节
    STATE_FOOTER_LOW      // 等待数据尾低字节
} Protocol_State;


class Mainwindow;
namespace Ui {
class internectClient;
}

class internectClient : public QWidget
{
    Q_OBJECT

public:
    explicit internectClient(QWidget *parent = nullptr);
    internectClient(const QString &hostName, quint16 port);
    bool C_connect(const QString &hostName, quint16 port);
    //bool write(QTcpSocket* socket, const QByteArray& data);
    //void C_send();
    void C_recv();
    bool arg;
//    Protocol_State rx_state = STATE_HEADER_HIGH;
//    uint8_t rx_buffer[256];   // 接收缓冲区
//    uint8_t data_index = 0;
//    uint8_t expected_len = 0;
//    uint8_t Calculate_CRC8(const uint8_t *data, uint8_t len);
//    void Process_Packet(uint8_t address, uint8_t func_code, uint8_t *data, uint8_t data_len);
//    void Protocol_RX_Handler(uint8_t rx_byte);
    ~internectClient();

private:
    Ui::internectClient *ui;
    QTcpSocket socket;
    char a[128]={0};
};

#endif // INTERNECTCLIENT_H

///jiazaitupian.h
#ifndef JIAZAITUPIAN_H
#define JIAZAITUPIAN_H

#include <QWidget>
#include <QPixmap>
#include <QPaintEvent>
#include <QPainter>
class Mainwindow;
namespace Ui {
class jiazaitupian;
}

class jiazaitupian : public QWidget
{
    Q_OBJECT

public:
    explicit jiazaitupian(QWidget *parent = nullptr);
    ~jiazaitupian();
    void paintEvent(QPaintEvent *event);
private:
    Ui::jiazaitupian *ui;
};

#endif // JIAZAITUPIAN_H

mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "guard.h"
#include "user1.h"
#include "user2.h"
#include "jiazaitupian.h"
#include "ruanjiantubiao.h"
#include <stdbool.h>
#include <sys/ioctl.h>
#include <stdio.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <pthread.h>
#include <QTimer>
#include "internectclient.h"

#define TEMPE _IOR('T', 0x01, unsigned long)
#define HUMI _IOR('H', 0x02, unsigned long)


QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:

    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

signals:
    void user1temp();
    void user1humi();
private slots:
    void on_user1_button_clicked();
    void on_guard_button_clicked();
    void on_user2_button_clicked();
    void on_pushButton_clicked();
    void on_fan_button_clicked();
    void on_led_button_clicked();
    void on_buzzer_button_clicked();
    void on_motorm_button_clicked();

    void updateTemperature(); // 新增的槽函数,用于更新温度
    void updateHumidity();

public slots:
    void on_temp_button_clicked();
    void on_humi_button_clicked();
private:
    Ui::MainWindow *ui;
    int isfan=1;  // 用于记录风扇的开关状态
    int isbuzzer=1;
    int ismotorm=1;
    int isled=1;
    int dev_status; // 设备状态
    QTimer *timer;  // QTimer 对象,用于定时更新设备状态
    int fd[7];

    int sID = 0;
    unsigned short i2c_data_change(unsigned short data)
    {
        unsigned short temp;
        temp = data<<8;
        data =temp|(data>>8&0xff);
        return data;
    }
    int fd1,fd2;
    unsigned short read_data;
    unsigned short read_shidu;
    double tempe ; //温度
    double humi ; //湿度
//    double humi1;


    QTimer *timer1;
    QTimer *timer2;
//    QTimer *timer3;
//    QTimer *timer4;
//    QTimer *timer5;
//    QTimer *timer6;
//    QTimer *timer7;
//    QTimer *timer8;
    user1 *UR1;
public:
    int istemp=1;
    int istemp1=1;
    int ishumi=1;
    const QString hostName;
    internectClient c;
    void timerEvent(QTimerEvent *event);
    quint16 port;
};
#endif // MAINWINDOW_H


/ruanjiantubiao.h
#ifndef RUANJIANTUBIAO_H
#define RUANJIANTUBIAO_H

#include <QWidget>
#include "jiazaitupian.h"
class Mainwindow;
namespace Ui {
class ruanjiantubiao;
}

class ruanjiantubiao : public QWidget
{
    Q_OBJECT

public:
    explicit ruanjiantubiao(QWidget *parent = nullptr);
    ~ruanjiantubiao();

private slots:
    void on_pushButton_clicked();

private:
    Ui::ruanjiantubiao *ui;
};

#endif // RUANJIANTUBIAO_H

user1.h
#ifndef USER1_H
#define USER1_H

#include <QWidget>
#include <stdbool.h>
#include <sys/ioctl.h>
#include <stdio.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <pthread.h>
#include <QTimer>

#define TEMPE _IOR('T', 0x01, unsigned long)
#define HUMI _IOR('H', 0x02, unsigned long)
class Mainwindow;
namespace Ui {
class user1;
}

class user1 : public QWidget
{
    Q_OBJECT

public:
    explicit user1(QWidget *parent = nullptr);
    ~user1();

signals:
    void huixiantemp();
    void huixianhumi();
public slots:
    void on_user1_withdraw_clicked();
    void updateTemperature1(); // 新增的槽函数,用于更新温度
    void updateHumidity1();
    void showuser1data();
public:
    Ui::user1 *ui;
    int fd3,fd4;
    int sID = 0;
    unsigned short i2c_data_change(unsigned short data)
    {
        unsigned short temp;
        temp = data<<8;
        data =temp|(data>>8&0xff);
        return data;
    }
    int istemp1,ishumi1;
    QTimer *timer3,*timer4;

    unsigned short read_data;
    unsigned short read_shidu;
    double tempe ; //温度
    double humi ; //湿度

};

#endif // USER1_H


///user2.h
#ifndef USER2_H
#define USER2_H

#include <QWidget>
class Mainwindow;
namespace Ui {
class user2;
}

class user2 : public QWidget
{
    Q_OBJECT

public:
    explicit user2(QWidget *parent = nullptr);
    ~user2();

private slots:
    void on_user2_withdraw_clicked();

private:
    Ui::user2 *ui;
};

#endif // USER2_H


//guard.cpp
#include "guard.h"
#include "ui_guard.h"
#include "mainwindow.h"
guard::guard(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::guard)
{
    ui->setupUi(this);
}

guard::~guard()
{
    delete ui;
}

void guard::on_guard_withdraw_clicked()
{
    MainWindow *MW=new MainWindow;
    MW->show();
    close();
}


//internectClient.cpp
#include "internectclient.h"
#include "ui_internectclient.h"
#include "mainwindow.h"
#include <QDebug>
internectClient::internectClient(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::internectClient)
{
    ui->setupUi(this);
}

internectClient::~internectClient()
{
    delete ui;
}


// 多项式: x8 + x2 + x + 1 (0x07)
//uint8_t internectClient::Calculate_CRC8(const uint8_t *data, uint8_t len) {
//    uint8_t crc = 0x00;
//    for (uint8_t i = 0; i < len; i++) {
//        crc ^= data[i];
//        for (uint8_t j = 0; j < 8; j++) {
//            if (crc & 0x80) {
//                crc = (crc << 1) ^ 0x07;
//            } else {
//                crc <<= 1;
//            }
//        }
//    }
//    return crc;
//}

// 处理接收到的完整数据包
//void internectClient::Process_Packet(uint8_t address, uint8_t func_code, uint8_t *data, uint8_t data_len) {
//    switch (func_code) {
//        case PROTOCOL_FUNC_GET_TEMP:
//            qDebug() << "Received GET_TEMP command";
//            break;
//        case PROTOCOL_FUNC_GET_HUMI:
//            qDebug() << "Received GET_HUMI command";
//            break;
//        case PROTOCOL_FUNC_GET_SERVO:
//            qDebug() << "Received GET_SERVO command";
//            break;
//    }
//}

// 协议接收处理函数
//void internectClient::Protocol_RX_Handler(uint8_t rx_byte) {
//    static uint8_t crc_calc;
//    qDebug() << "[State" << rx_state << "] Received: 0x" << QString::number(rx_byte, 16);
//    switch (rx_state) {
//        // 处理数据头(0xAAAA)
//        case STATE_HEADER_HIGH:
//            if (rx_byte == (PROTOCOL_HEADER >> 8)) {
//                qDebug() << "Header High OK";
//                rx_state = STATE_HEADER_LOW;
//            } else {
//                qDebug() << "rx_state != STATE_HEADER_LOW";
//            }
//            break;
//        case STATE_HEADER_LOW:
//            if (rx_byte == (PROTOCOL_HEADER & 0xFF)) {
//                rx_state = STATE_ADDRESS;
//            } else {
//                rx_state = STATE_HEADER_HIGH; // 头不匹配,重置
//            }
//            break;

//        // 处理地址、功能码、数据长度
//        case STATE_ADDRESS:
//            rx_buffer[0] = rx_byte; // 存储地址
//            rx_state = STATE_FUNC_CODE;
//            break;
//        case STATE_FUNC_CODE:
//            rx_buffer[1] = rx_byte; // 功能码
//            rx_state = STATE_DATA_LEN;
//            break;
//        case STATE_DATA_LEN:
//            expected_len = rx_byte; // 数据长度
//            rx_buffer[2] = rx_byte;
//            data_index = 0;
//            if (expected_len > 0) {
//                rx_state = STATE_DATA;
//            } else {
//                rx_state = STATE_CRC;
//            }
//            break;
//        case STATE_DATA:
//            rx_buffer[3 + data_index] = rx_byte;
//            data_index++;
//            if (data_index >= expected_len) {
//                rx_state = STATE_CRC;
//            }
//            break;

//        // 处理CRC
//        case STATE_CRC:
//            crc_calc = Calculate_CRC8(rx_buffer, 3 + expected_len);
//            if (crc_calc == rx_byte) {
//                rx_state = STATE_FOOTER_HIGH; // CRC通过,继续检查数据尾
//            } else {
//                rx_state = STATE_HEADER_HIGH; // CRC错误,重置
//            }
//            break;

//        // 处理数据尾(0x5555)
//        case STATE_FOOTER_HIGH:
//            if (rx_byte == (PROTOCOL_FOOTER >> 8)) {
//                rx_state = STATE_FOOTER_LOW;
//            } else {
//                rx_state = STATE_HEADER_HIGH; // 数据尾错误,重置
//            }
//            break;
//        case STATE_FOOTER_LOW:
//            if (rx_byte == (PROTOCOL_FOOTER & 0xFF)) {
//                // 完整包接收成功!
//                Process_Packet(rx_buffer[0], rx_buffer[1],
//                               &rx_buffer[3], rx_buffer[2]);
//            }
//            rx_state = STATE_HEADER_HIGH; // 重置状态机
//            break;
//    }
//}
//internectClient::internectClient(const QString &hostName, quint16 port)
//    : rx_state(STATE_HEADER_HIGH), data_index(0), expected_len(0)
//{
//    memset(rx_buffer, 0, sizeof(rx_buffer));
//    C_connect(hostName, port);
//    C_send();
//    C_recv();
//}

bool internectClient::C_connect(const QString &hostName, quint16 port)
{
    arg = false;
    // 连接到服务器
    socket.connectToHost(hostName, port);
    if (socket.waitForConnected()) {
        arg = true;
        qDebug() << "link successfully.";
        return true;
    }
    else
    {
        qDebug() << "Failed to connect to server: " << socket.errorString();
        return false;
    }
}

//void internectClient::C_send()
//{
//        qDebug() << "C_send";
//        // 准备要发送的数据
//        const char *d;
//        d = "hello";
//        QByteArray byteArray;
//        byteArray.resize(sizeof(d));
//        memcpy(byteArray.data(), &d, sizeof(d));
//        socket.write(byteArray);
//        socket.waitForBytesWritten();
//        qDebug() << "Data sent successfully.";
//}

void internectClient::C_recv()
{

//        qDebug() << "C_recv";
//        char a[128];
//        qint64 bytesRead = socket.read(a, sizeof(a));

//        if (bytesRead == -1) {
//            qDebug() << "Error reading data from socket:" << socket.errorString();
//            return;
//        } else if (bytesRead == 0) {
//            qDebug() << "No data received.";
//            return;
//        }

//        qDebug() << "Data recv successfully.";

//        for (qint64 i = 0; i < bytesRead; ++i) {
//            Protocol_RX_Handler(static_cast<uint8_t>(a[i]));
//        }

    qDebug() << "recv data";

    socket.read(a,sizeof(a));
    int length=strlen(a);
    for(int i=0;i<length;i++)
    {
        qDebug()<<a[i];
    }
    qDebug()<<"data successful";
}

//bool internectClient::write(QTcpSocket* socket, const QByteArray& data) {
//    if (!socket) {
//        qDebug() << "Socket 指针为空";
//        return false;
//    }

//    if (socket->state() != QAbstractSocket::ConnectedState) {
//        qDebug() << "网络未连接,无法发送数据";
//        return false;
//    }

//    qint64 bytesWritten = socket->write(data);
//    if (bytesWritten == -1) {
//        qDebug() << "网络数据发送失败:" << socket->errorString();
//        return false;
//    }

//    if (!socket->waitForBytesWritten(5000)) {  // 等待数据发送完成,超时时间为 5000 毫秒
//        qDebug() << "数据发送超时:" << socket->errorString();
//        return false;
//    }

//    qDebug() << "网络数据发送成功,发送字节数:" << bytesWritten;
//    return true;
//}


//jiazaitubiao.cpp
#include "jiazaitupian.h"
#include "ui_jiazaitupian.h"
#include "mainwindow.h"
jiazaitupian::jiazaitupian(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::jiazaitupian)
{
    ui->setupUi(this);
}

jiazaitupian::~jiazaitupian()
{
    delete ui;
}

void jiazaitupian::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.drawPixmap(0,0,width(),height(),QPixmap(":/new/prefix1/66.jpg"));
}


///mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <QDebug>
#include <QString>
#include <arpa/inet.h>
#include <unistd.h>

MainWindow::MainWindow(QWidget *parent)
  : QMainWindow(parent)
    , ui(new Ui::MainWindow)
    , dev_status(0)
    , timer(new QTimer(this))
    , hostName("192.168.50.116")
    , port(8088)
{
    ui->setupUi(this);
    startTimer(5000);
    c.C_connect(hostName, port);
    for (int i = 0; i < 7; i++) {
        fd[i] = -1; // 初始化文件描述符数组
    }
    fd[3] = open("/dev/drv_fan", O_RDWR);
    if(fd[3] < 0)
    {
        printf("app:fd[3]open_fan_err\r\n");
        exit(3);
    }
    fd[0] = open("/dev/drv_led", O_RDWR);
    if(fd[0] < 0)
    {
        printf("app:fd[0]open_led_err\r\n");
        exit(1);
    }
    fd[4] = open("/dev/drv_LED_1", O_RDWR);
    if(fd[4] < 0)
    {
        printf("app:fd[4]open_LED_1_err\r\n");
        exit(4);
    }
    fd[5] = open("/dev/drv_LED_2", O_RDWR);
    if(fd[5] < 0)
    {
        printf("app:fd[5]open_LED_2_err\r\n");
        exit(5);
    }
    fd[6] = open("/dev/drv_LED_3", O_RDWR);
    if(fd[6] < 0)
    {
        printf("app:fd[6]open_LED_3_err\r\n");
        exit(6);
    }
    fd[1] = open("/dev/drv_beep", O_RDWR);
    if(fd[1] < 0)
    {
        printf("app:fd[1]open_beep_err\r\n");
        exit(3);
    }
    fd[2] = open("/dev/drv_motor", O_RDWR);
    if(fd[2] < 0)
    {
        printf("app:fd[2]open_motor_err\r\n");
        exit(3);
    }
    fd1 = open("/dev/drv_i2c_si7600", O_RDWR); // 阻塞方式
    if (fd1 < 0)
    {
        printf("app:open_err\r\n");
        timer1->stop(); // 若打开失败,停止定时器
        return;
    }
    fd2 = open("/dev/drv_i2c_si7600", O_RDWR); // 阻塞方式
    if (fd2 < 0)
    {
        printf("app:open_err\r\n");
        timer2->stop(); // 若打开失败,停止定时器
        return;
    }
    // 启动定时器,temp
    timer1 = new QTimer(this);
    connect(timer1, &QTimer::timeout, this, &MainWindow::updateTemperature);

    // 启动定时器,humi
    timer2 = new QTimer(this);
    connect(timer2, &QTimer::timeout, this, &MainWindow::updateHumidity);

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::timerEvent(QTimerEvent *event)
{
     //c.C_send();
     c.C_recv();
}

void MainWindow::on_user1_button_clicked()
{

    user1 *UR1=new user1;
    connect(this, &MainWindow::user1temp, UR1, &user1::showuser1data);
    UR1->show();
    user1temp();
    user1humi();
    close();

}

void MainWindow::on_guard_button_clicked()
{
    guard *GD=new guard;
    GD->show();
    close();
}

void MainWindow::on_user2_button_clicked()
{
    user2 *UR2=new user2;
    UR2->show();
    close();
}

void MainWindow::on_pushButton_clicked()
{
    ruanjiantubiao *RT=new ruanjiantubiao;
    RT->show();
    close();
}


void MainWindow::on_fan_button_clicked()
{
    qDebug()<<"isfan:"<<isfan<<endl;
    if(isfan%2)
    {
        QString data="开";
        QString text = QString("   %1").arg(data);
        ui->fan_data->setText(text);
        dev_status =1;
        qDebug()<<"dev_status:"<<dev_status<<endl;
        write(fd[3], &dev_status, sizeof(int));
    }else{
        QString data1="关";
        QString text1 = QString("   %1").arg(data1);
        ui->fan_data->setText(text1);
        dev_status=0;
        write(fd[3], &dev_status, sizeof(int));
    }
    isfan++;
}

void MainWindow::on_led_button_clicked()
{
    qDebug()<<"isled:"<<isled<<endl;
    if(isled%2)
    {
        QString data="开";
        QString text = QString("   %1").arg(data);
        ui->led_data->setText(text);
        dev_status =1;
        qDebug()<<"dev_status:"<<dev_status<<endl;
        write(fd[0], &dev_status, sizeof(int));
        write(fd[4], &dev_status, sizeof(int));
        write(fd[5], &dev_status, sizeof(int));
        write(fd[6], &dev_status, sizeof(int));
    }else{
        QString data1="关";
        QString text1 = QString("   %1").arg(data1);
        ui->led_data->setText(text1);
        dev_status=0;
        write(fd[0], &dev_status, sizeof(int));
        write(fd[4], &dev_status, sizeof(int));
        write(fd[5], &dev_status, sizeof(int));
        write(fd[6], &dev_status, sizeof(int));
    }
    isled++;
}

void MainWindow::on_buzzer_button_clicked()
{
    qDebug()<<"isbuzzer:"<<isbuzzer<<endl;
    if(isbuzzer%2)
    {
        QString data="开";
        QString text = QString("   %1").arg(data);
        ui->buzzer_data->setText(text);
        dev_status =1;
        qDebug()<<"dev_status:"<<dev_status<<endl;
        write(fd[1], &dev_status, sizeof(int));
    }else{
        QString data1="关";
        QString text1 = QString("   %1").arg(data1);
        ui->buzzer_data->setText(text1);
        dev_status=0;
        write(fd[1], &dev_status, sizeof(int));
    }
    isbuzzer++;
}

void MainWindow::on_motorm_button_clicked()
{
    qDebug()<<"ismotorm:"<<ismotorm<<endl;
    if(ismotorm%2)
    {
        QString data="开";
        QString text = QString("   %1").arg(data);
        ui->motorm_data->setText(text);
        dev_status =1;
        qDebug()<<"dev_status:"<<dev_status<<endl;
        write(fd[2], &dev_status, sizeof(int));
    }else{
        QString data1="关";
        QString text1 = QString("   %1").arg(data1);
        ui->motorm_data->setText(text1);
        dev_status=0;
        write(fd[2], &dev_status, sizeof(int));
    }
    ismotorm++;
}

void MainWindow::on_temp_button_clicked()
{
    qDebug()<<"istemp:"<<istemp<<endl;

    if (istemp % 2)
    {
        timer1->start(1000);
    }else{
        timer1->stop();
    }
    istemp++;
}

void MainWindow::updateTemperature()
{
    int fandata,buzzerdata;
    ioctl(fd1, TEMPE, &read_data);
    printf("app:read_data = %d\r\n", read_data);
    read_data = i2c_data_change(read_data);
    tempe = (175.72 * read_data) / 65536 - 46.85;
    QString text = QString(" %1").arg(tempe,0,'f',2);
    ui->temp_data->setText(text);
    if(tempe>=24)
    {
        fandata=1;buzzerdata=1;
        ui->temp_data->setStyleSheet("QLabel{background-color: red;}");
        write(fd[3], &fandata, sizeof(int));
        write(fd[1], &buzzerdata, sizeof(int));
    }else{
        fandata=0;buzzerdata=0;
        ui->temp_data->setStyleSheet("");
        write(fd[3], &fandata, sizeof(int));
        write(fd[1], &buzzerdata, sizeof(int));
    }
}

void MainWindow::on_humi_button_clicked()
{
    if (ishumi % 2)
    {
        // 设定更新时间,这里设置为 4000 毫秒(即 4 秒),可按需调整
        timer2->start(1000);
    }else{
        timer2->stop();
    }
    ishumi++;
}

void MainWindow::updateHumidity()
{
    int motormdata;
    ioctl(fd2,HUMI , &read_shidu);
    printf("app:read_shidu = %d\r\n",read_shidu);
    read_shidu = i2c_data_change(read_shidu);
    humi = (125*read_shidu)/65536-6;
    QString text = QString(" %1").arg(humi,0,'f',2);
    ui->humi_data->setText(text);
    if(humi>=93)
    {
        motormdata=1;
        ui->humi_data->setStyleSheet("QLabel{background-color: red;}");
        write(fd[2], &motormdata, sizeof(int));
    }else{
        motormdata=0;
        ui->humi_data->setStyleSheet("");
        write(fd[2], &motormdata, sizeof(int));
    }

}


/ruanjiantubiao.cpp
#include "ruanjiantubiao.h"
#include "ui_ruanjiantubiao.h"
#include "mainwindow.h"
#include <QElapsedTimer>
ruanjiantubiao::ruanjiantubiao(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::ruanjiantubiao)
{
    ui->setupUi(this);
}

ruanjiantubiao::~ruanjiantubiao()
{
    delete ui;
}

void ruanjiantubiao::on_pushButton_clicked()
{
    jiazaitupian *splash=new jiazaitupian;
    QElapsedTimer timer;
    timer.start();
    while (timer.elapsed() < 3000) {
        splash->show();
        QCoreApplication::processEvents();
    }
    splash->close();
    close();
    MainWindow* CI = new MainWindow;
    CI->show();
}


/user1.cpp
#include "user1.h"
#include "ui_user1.h"
#include "mainwindow.h"
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <QDebug>
#include <QString>

user1::user1(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::user1)
{
    ui->setupUi(this);
    fd3 = open("/dev/drv_i2c_si7600", O_RDWR); // 阻塞方式
    if (fd3 < 0)
    {
        printf("app:open_err\r\n");
        timer3->stop(); // 若打开失败,停止定时器
        return;
    }
    fd4 = open("/dev/drv_i2c_si7600", O_RDWR); // 阻塞方式
    if (fd4 < 0)
    {
        printf("app:open_err\r\n");
        timer4->stop(); // 若打开失败,停止定时器
        return;
    }
}

user1::~user1()
{
    delete ui;
}

void user1::on_user1_withdraw_clicked()
{
    timer3->stop();
    timer4->stop();
    MainWindow *MW=new MainWindow;
    connect(this,&user1::huixiantemp,MW,&MainWindow::on_temp_button_clicked);
    connect(this,&user1::huixianhumi,MW,&MainWindow::on_humi_button_clicked);
    MW->show();
    huixiantemp();
    huixianhumi();
    close();
}

void user1::showuser1data()
{
    istemp1=1,ishumi1=1;
    if (istemp1 % 2)
    {
        // 启动定时器
        timer3 = new QTimer(this);
        connect(timer3, &QTimer::timeout, this, &user1::updateTemperature1);
        // 设定更新时间,这里设置为 2000 毫秒(即 2 秒),可按需调整
        timer3->start(1000);
    }else{
        timer3->stop();
    }

    if (ishumi1 % 2)
    {
        // 启动定时器
        timer4 = new QTimer(this);
        connect(timer4, &QTimer::timeout, this, &user1::updateHumidity1);
        // 设定更新时间,这里设置为 2000 毫秒(即 2 秒),可按需调整
        timer4->start(1000);
    }else{
        timer4->stop();
    }

}

void user1::updateTemperature1()
{

    ioctl(fd3, TEMPE, &read_data);
    printf("app:read_data = %d\r\n", read_data);
    read_data = i2c_data_change(read_data);
    tempe = (175.72 * read_data) / 65536 - 46.85;
    QString text = QString("     %1").arg(tempe,0,'f',2);
    ui->temp_data_1->setText(text);
    if(tempe>=24)
    {
        ui->temp_data_1->setStyleSheet("QLabel{background-color: red;}");
    }else{
        ui->temp_data_1->setStyleSheet("");
    }
}

void user1::updateHumidity1()
{
    ioctl(fd4,HUMI , &read_shidu);
    printf("app:read_shidu = %d\r\n",read_shidu);
    read_shidu = i2c_data_change(read_shidu);
    humi = (125*read_shidu)/65536-6;
    QString text = QString("     %1").arg(humi,0,'f',2);
    ui->humi_data_1->setText(text);
    if(humi>=93)
    {
        ui->humi_data_1->setStyleSheet("QLabel{background-color: red;}");
    }else{
        ui->humi_data_1->setStyleSheet("");
    }
}


user2.cpp
#include "user2.h"
#include "ui_user2.h"
#include "mainwindow.h"
user2::user2(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::user2)
{
    ui->setupUi(this);
}

user2::~user2()
{
    delete ui;
}

void user2::on_user2_withdraw_clicked()
{
    MainWindow *MW=new MainWindow;
    MW->show();
    close();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值