HMI-25-【發動機】弄個發動機

基於Qt的汽車儀表模擬

距離上一次寫以及相隔一個多月了,這一個月可不好過,估計大家都以爲我吧剩下的兩個界面寫了,可以還沒有寫,寫不動了,又感覺膩味了,加上最近一直在寫文檔,煩的要死。

這裏說明下爲什麼要開始寫發動機,有好多網友拿到體驗程序處理可以看下啓動動畫就什麼都看不到了,而我和麪寫的那接種模式不過是界面上的變化,沒有更多的新的東西,所以暫時先調整一下順序,同時也緩解一下我自己的情緒,每天寫點沒啥價值的東西,有的時候就也不想寫了,所以決定先寫個發動機。

這次先寫一個發動機的1.0版本,內部都先沒有,只有根據油門輸入的值變成轉速發出來。

 

 

這裏簡單的實現了發動機的1.0版本,只有一個缸,有一個模擬啓動後轉速偏高,穩定後降下來的模擬,其實實現很簡單。在我的項目裏,實現這個小功能有麻煩,我分的內容太多了,所以邏輯我就不說了,就說這個發動機吧,哈哈。1.0裏面連溫度都沒有做了。

頭文件

 

#ifndef ENGING_6VAT_H
#define ENGING_6VAT_H
/**
  版本:1.0
 */
#include <QObject>
#include <QThread>
#include <QTimer>

class VAT : public QThread
{
    Q_OBJECT

public:

    virtual void run();
signals:
    /**
     * @brief signal_VATSpeed
     * @param speed
     * 返回氣缸的運行速度
     */
    void signal_VATSpeed(int speed);

public:
    int accelerator = 100;
    bool stopflag = false;

};


class Enging_6vat : public QObject
{
    Q_OBJECT
public:
    explicit Enging_6vat(QObject *parent = nullptr);
    /**
     * @brief engintStart
     * 啓動發動機
     */
    void  engintStart();
    /**
     * @brief engintStop
     * 發動機停止
     */
    void engintStop();
    /**
     * @brief engintAccelerator
     * @param accelerator
     * 發動機油門0-100,默認爲10
     */
    void engintAccelerator(int accelerator = 10);

signals:
    /**
     * @brief engineRotateSpeed
     * @param rotateSpeed
     * 返回發動機轉速
     */
    void signal_EngineRotateSpeed(int rotateSpeed);
    /**
     * @brief signal_EngineTemperature
     * @param temperature
     * 返回發動機溫度
     */
    void signal_EngineTemperature(int temperature);


public slots:


private:
    VAT *m_VAT_1 = nullptr;
};

#endif // ENGING_6VAT_H

 

源文件

#include "enging_6vat.h"
#include <QtDebug>
Enging_6vat::Enging_6vat(QObject *parent) : QObject(parent)
{
    m_VAT_1 = new VAT();
    connect(m_VAT_1,&VAT::signal_VATSpeed,this,[=](int speed){
        emit signal_EngineRotateSpeed(speed);
    });
}

void Enging_6vat::engintStart()
{

    m_VAT_1->stopflag = false;
    m_VAT_1->start();
    QTimer::singleShot(3000,this,[=](){m_VAT_1->accelerator = 80;});

}

void Enging_6vat::engintStop()
{
    m_VAT_1->stopflag = true;
}

void Enging_6vat::engintAccelerator(int accelerator)
{
    if(m_VAT_1)
    {
        m_VAT_1->accelerator = accelerator;
    }
}

void VAT::run()
{
    while (1)
    {
         emit signal_VATSpeed(8*accelerator);
        if(stopflag)
        {
            break;
        }
        msleep(25);
    }
}

體驗地址:https://pan.baidu.com/s/1rQFZx5JIud8lWdjMHl0tpg

 

 

 

2019/10/13 16:16

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章