HMI-25-【发动机】弄个发动机

简介: 基于Qt的汽车仪表模拟

image.png

点此链接查看视频

距离上一次写以及相隔一个多月了,这一个月可不好过,估计大家都以为我吧剩下的两个界面写了,可以还没有写,写不动了,又感觉腻味了,加上最近一直在写文档,烦的要死。


这里说明下为什么要开始写发动机,有好多网友拿到体验程序处理可以看下启动动画就什么都看不到了,而我和面写的那接种模式不过是界面上的变化,没有更多的新的东西,所以暂时先调整一下顺序,同时也缓解一下我自己的情绪,每天写点没啥价值的东西,有的时候就也不想写了,所以决定先写个发动机。


这次先写一个发动机的1.0版本,内部都先没有,只有根据油门输入的值变成转速发出来。

image.png

这里简单的实现了发动机的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


image.png

目录
相关文章
|
存储 Go 容器
【golang】对键值有顺序要求时,不要使用 map
【golang】对键值有顺序要求时,不要使用 map
323 0
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
缓存 监控 NoSQL
redis 缓存穿透 击穿 雪崩 的原因及解决方法
redis 缓存穿透 击穿 雪崩 的原因及解决方法
|
开发框架 Oracle 关系型数据库
ABP框架使用Oracle数据库,并实现从SQLServer中进行数据迁移的处理
ABP框架使用Oracle数据库,并实现从SQLServer中进行数据迁移的处理
|
存储 JavaScript 安全
Node中的AsyncLocalStorage 使用问题之nestjs-cls 库提供了什么功能
Node中的AsyncLocalStorage 使用问题之nestjs-cls 库提供了什么功能
267 3
|
Docker 容器
29-Docker-常用命令详解-docker history/diff
29-Docker-常用命令详解-docker history/diff
|
SQL 分布式计算 前端开发
MaxCompute操作报错合集之SQL脚本设置参数set odps.mapred.reduce.tasks=18;没有生效,是为什么
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
363 5
若依修改-----其他功能,包括参数设置,通知公告,日志管理,验证码控制开关在参数设置里,若依的注册页面是隐藏的,在src的login.vue的97行注册开发,修改成true,通知公告,促进组织内部信
若依修改-----其他功能,包括参数设置,通知公告,日志管理,验证码控制开关在参数设置里,若依的注册页面是隐藏的,在src的login.vue的97行注册开发,修改成true,通知公告,促进组织内部信
|
SQL 分布式计算 HIVE
最强指南!数据湖Apache Hudi、Iceberg、Delta环境搭建
最强指南!数据湖Apache Hudi、Iceberg、Delta环境搭建
686 0

热门文章

最新文章