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

[复制链接]
1144|8
 楼主| 数码小叶 发表于 2022-9-6 21:12 | 显示全部楼层 |阅读模式
本帖最后由 数码小叶 于 2022-9-6 21:11 编辑

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

2022-09-06_19-20-54.png

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


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


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


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

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

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


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

 楼主| 数码小叶 发表于 2022-9-6 21:14 | 显示全部楼层
starnavi 发表于 2022-9-7 14:22 | 显示全部楼层
这个速度多快

评论

可以自己设置,我设置的每50帧获取一次传感器数据  发表于 2022-9-7 20:36
Pretext 发表于 2022-9-7 15:51 | 显示全部楼层
看到喷嘴一瞬间笑了
 楼主| 数码小叶 发表于 2022-9-7 20:38 | 显示全部楼层
Pretext 发表于 2022-9-7 15:51
看到喷嘴一瞬间笑了

本来想用加湿器的,后来还是觉得喷壶直接
lihuami 发表于 2022-11-1 17:51 | 显示全部楼层
mvp一般是指什么呢      
jkl21 发表于 2022-11-1 18:14 | 显示全部楼层
如何更高效的使用MVP以及官方MVP架构解析  
chenci2013 发表于 2022-11-1 18:32 | 显示全部楼层
mvp是什么意思?           
您需要登录后才可以回帖 登录 | 注册

本版积分规则

105

主题

2560

帖子

19

粉丝
快速回复 在线客服 返回列表 返回顶部