打印
[GUI]

【STM32H750B-DK评测】六:双屏间的数据交互以及同步

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

上一篇使用进度条来实现温度的动态显示,这里还缺少了第一屏和第二屏的数据交互


第一屏,负责设置温度和湿度的阈值,由上下触摸按键负责调整数值,保存键负责保存数据,可以不用保存键,在上下键按得同时保存数据,但这样如果设置错误想撤销就得再次调整了,所以还是加了保存按键



第二屏负责显示温度,设置键可以跳转到第一屏设置阈值,并且可以获取第一屏设置的阈值,再将获取到的温度值、湿度值和阈值进行比较,如果超过阈值,就改变数值和线性进度条的颜色为红色。
在第四篇中,采用的是MVP模型来显示数据,因此,这个数据交互也得遵循这个规则。对于MVP模型,每一时刻,只有1个SCREEN处于活跃状态,在SCREEN不处于活跃状态时,其值就被释放了。因此想要第二屏获取到它的数据,就得把数值保留下来,途径就是使用MVP的Model类,因为Model类始终处于活跃状态,在Model类中定义要保存的数据以及保存操作
    int16_t wenduSetting;
    int16_t shiduSetting;
    void savewenduSetting(int16_t savewenduSetting)
    {
     wenduSetting = savewenduSetting;
    }

    void saveshiduSetting(int16_t saveshiduSetting)
    {
     shiduSetting = saveshiduSetting;
    }

然后每次在保存键按下时,就去执行保存操作,在screen1view中调用
    virtual void buttonSavewenduClicked()
    {
    presenter->savewenduSetting(wenduSetting);
    }

    virtual void buttonSaveshiduClicked()
    {
    presenter->saveshiduSetting(shiduSetting);
    }


第二屏要获取数值,就得再有个获取操作,这样在View类中就可以调用了
    int16_t getwenduSetting()
    {
     return model->getwenduSetting();
    }

    int16_t getshiduSetting()
    {
     return model->getshiduSetting();
    }
    int16_t getwenduSetting()
    {
    return wenduSetting;
    }

    int16_t getshiduSetting()
    {
     return shiduSetting;
    }
虽然这样已经可以完整的实现了上一篇的效果,达到两个屏通过Model类实现数据交互,但是,此时,仔细观察屏幕会发现几个问题:

第二屏载入时,先是先是显示设置的默认值,再去显示获取到的温度值,第三步才是显示的阈值比较结果;
第一屏载入时,显示也是先显示初始值,再去显示上次设置的阈值;
这就是没考虑到两个屏的数据同步初始化问题,在两个屏幕载入时,为了直接达到显示结果的目的,应该在开始的时候就获取值,要获取值,就得保存值,相当于多了一个屏幕状态的保存。
    wenduSetting = presenter->getwenduSetting();
    shiduSetting = presenter->getshiduSetting();
在screen1view和screen2view载入的时候,分别调用get方法来载入上次的保存值,就是在setupScreen方法中调用,这样,在屏幕来回切换时,就没有好几步的中断感觉了
    wenduAlarm = presenter->getwenduSetting();
    shiduAlarm = presenter->getshiduSetting();
    lastwendu = presenter->getwendu();
    lastshidu = presenter->getshidu();
最后视频显示效果:



为了对比,线性进度条只对颜色和阈值比较结果进行了同步,没有对数值进行同步,可以看到,每词切换载入时,其值要增减一次,而其它的数据显示,在进行了同步操作后,切换屏幕,数据显示没有任何跳变发生。

使用特权

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

使用特权

评论回复
板凳
sdlls| | 2022-11-15 19:34 | 只看该作者
gui上的所有控件都是楼主自己编写的吗?

使用特权

评论回复
地板
macpherson| | 2022-11-15 19:48 | 只看该作者
这个屏幕刷新的速度这么快吗?

使用特权

评论回复
5
sesefadou| | 2022-11-15 20:09 | 只看该作者
整体的板子的功耗是多少?做工业设计的怎么样

使用特权

评论回复
6
alvpeg| | 2022-11-15 20:57 | 只看该作者
STM32H750B设置的频率是多大的?

使用特权

评论回复
7
wwppd| | 2022-11-15 21:57 | 只看该作者
是需要开通双buffer作为缓冲的吗?

使用特权

评论回复
8
数码小叶|  楼主 | 2022-11-17 21:26 | 只看该作者
wwppd 发表于 2022-11-15 21:57
是需要开通双buffer作为缓冲的吗?

不需要

使用特权

评论回复
9
数码小叶|  楼主 | 2022-11-17 21:26 | 只看该作者
alvpeg 发表于 2022-11-15 20:57
STM32H750B设置的频率是多大的?

没跑到最高,400多一点

使用特权

评论回复
10
数码小叶|  楼主 | 2022-11-17 21:27 | 只看该作者
sdlls 发表于 2022-11-15 19:34
gui上的所有控件都是楼主自己编写的吗?

额。。。都是自带的控件

使用特权

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

本版积分规则

103

主题

2540

帖子

19

粉丝