打印
[GUI]

【STM32H750B-DK评测】四:利用MVP模型显示温湿度

[复制链接]
800|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 数码小叶 于 2022-9-6 21:11 编辑

上一篇已经可以获取SHT3x的温度和湿度数值,接下来就是把获取到的值显示到屏幕上,中间暂时省略了两大步骤,touchGFX和LTC的结合、屏幕UI,先达到显示的效果。要将数值显示到屏幕上,有N多种方式,既然使用了touchGFX,那最简单的肯定是遵循touchGFX的思想。touchGFX采用了MVP的设计思想,MVP即:Model-View-Presenter设计模式



MVP中定义了三个大类:
Model类:是一种接口,用于定义要在用户界面上显示或有其他形式操作的数据。
View类:是一种被动接口,用于显示数据(来自Model),并将用户指令(事件)传给Presenter以便根据该数据进行操作。
Presenter类:操作取决于Model和View。 它从存储库(Model)检索数据,并将其格式化以便在视图中显示。


因此MVP模型具有三个特点:将逻辑从图形中分离处理;使得独立测试更加简单;便于重用代码。之所以可以达到这样的效果是因为touchGFX将代码分成不同的部分提供,每部分有自己的任务。 这使得代码更简单、可重复使用性更高且更易于维护。由于UI的逻辑(Presenter)独立于视图(View),因此,单独测试这些部分会容易很多。


熟悉MVP模型后,要显示SHT3x的数值,就简单了,首先是Model类获取数据,这个数据肯定是来源于SHT3x的处理函数
void Model::tick()
{
    tickcounter++;
    if((tickcounter % 50) == 0)
    {
         if(modelListener !=0)
        {
            GetWenShiduValue();
            modelListener -> NewWenShiduTempValue(SHT3x_Data.SHT3x_Temperature,SHT3x_Data.SHT3x_Humidity);
        }
    }
}
为了简化参数传递,用一个结构体将温度和湿度封装到一起,这样就不用分两次传输了,Model类获取数据后,就是Presenter去请求View去更新数据,因此调用了View的SetViewWenShiduValue方法
void Screen1Presenter:: NewWenShiduTempValue(float value1,int value2)
{
        view.SetViewWenShiduValue(value1,value2);
}


最后是在View类中实现温度和湿度的更新,View类是直接和屏幕打交道的类
void Screen1View::SetViewWenShiduValue(float value1,int value2)
{
    if(lastwendu != value1)
    {
        Unicode::snprintfFloat(textAreaWenduBuffer, TEXTAREAWendu_SIZE, "%.1f", value1);
        textAreaWendu.invalidate();
        lastwendu = value1;
    }
    if(lastshidu != value2)
    {
        Unicode::snprintf(textAreaShiduBuffer, TEXTAREAShidu_SIZE, "%2d", value2);
        textAreaShidu.invalidate();
        lastshidu = value2;
    }
}

因为有了MVP这个设计思想,让数据交互有了流程化和标准化,最实际的意义就是让程序变得简单。程序编译,下载到STM32H750B-DK探索套件中,成功的显示了温度和湿度


这是界面一,这一页实际是设置温度和湿度的临界值,当温度达到这个临界值的时候,会采取相应的措施,比如报警、开启降温、除湿设备等,让温度和湿度回归正常范围。当前先用这一页显示数值,只有数值获取正常后才能进行下一步。


打火机加热,导致温度增加,湿度降低,喷水雾,导致湿度快速增高,从SHT3x底层传过来的数据已经可以在屏幕上正常显示了。

使用特权

评论回复
沙发
数码小叶|  楼主 | 2022-9-6 21:14 | 只看该作者
依旧是沙发@21小跑堂

使用特权

评论回复
板凳
starnavi| | 2022-9-7 14:22 | 只看该作者
这个速度多快

使用特权

评论回复
评论
数码小叶 2022-9-7 20:36 回复TA
可以自己设置,我设置的每50帧获取一次传感器数据 
地板
Pretext| | 2022-9-7 15:51 | 只看该作者
看到喷嘴一瞬间笑了

使用特权

评论回复
5
数码小叶|  楼主 | 2022-9-7 20:38 | 只看该作者
Pretext 发表于 2022-9-7 15:51
看到喷嘴一瞬间笑了

本来想用加湿器的,后来还是觉得喷壶直接

使用特权

评论回复
6
lihuami| | 2022-11-1 17:51 | 只看该作者
mvp一般是指什么呢      

使用特权

评论回复
7
jkl21| | 2022-11-1 18:14 | 只看该作者
如何更高效的使用MVP以及官方MVP架构解析  

使用特权

评论回复
8
chenci2013| | 2022-11-1 18:32 | 只看该作者
mvp是什么意思?           

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

103

主题

2542

帖子

19

粉丝