预警系统OLED挑选模式
引言
我们预警系统对于界面的需求, 也很简单, 在普通模式下, 可以显示家居信息, 通过按键交互可以, 显示其他界面. 在预警系统警报的时候, 可以应急显示特定的预警界面. 当警报解除的时候,可以自动回到之前的界面.
预警系统页面构思
正常情况下:
1.开机界面
2.温湿度,烟雾浓度界面
3.温湿度阈值,烟雾浓度阈值界面
预警情况下:
1.温度预警界面
2.湿度预警界面
3.烟雾浓度预警界面
按键与界面自动选择
看了这么多界面, 是不是心里有点慌, 不要慌, 我们来看大屏幕, 我带大家理清思路.
正常模式
在正常模式下, 我们现在充当单片机的OLED管理员. 我们开机, 就先显示开机界面, 然后读取温湿度数据, 读取初始化的温湿度阈值等环境信息.
然后此时, 我应该显示哪个界面呢?
默认就显示温湿度,烟雾浓度界面, 这是第二个界面.
那第三个界面呢, 就是温湿度阈值界面, 从第二个界面, 切换到第三个界面,是需要我们手动去切换的, 比如按下按键.
预警应急模式
当你还在正常的显示 环境信息页面的时候, 此时突然报警了, 比如出现了烟雾浓度异常的情况, 并且程序已经检测到了.
那此时的OLED界面, 就不能是人工手动跳转了, 而是, 中途直接接管, 修改当前应该显示的界面, 显示当前的预警信息, 当警报解除后, 才把页面再调整回去.
管理正常模式和预警模式
经过分析正常模式 和 预警模式, 我们知道, 正常模式, 是可以通过手动去进行调整的. 而预警模式, 需要系统检测到预警后, 去接管当前应该显示的界面.
所以我们需要定义一个当前应该显示哪个界面的变量, 我们提前把这六个界面整理好, 方便一会儿我们进行挑选.
正常模式下, 我们挑选的模式就是温湿度界面和阈值界面.
预警模式下, 我们挑选的分别是, 环境信息以及对应阈值预警界面.
在日常情况下,我们都是手动模式, 都是正常情况, 但是一旦出现预警情况, 我们就要直接接管OLED界面.
所以,我们要在挑选界面的时候, 判断一下,是否出现预警标志位, 如果预警标志位成立, 则把此时的界面选择权交给预警系统.
当预警结束后, 我们仍然从按键处理模型中, 去挑选菜单。
预警模式到正常模式切换
正常模式 -> 预警模式
我们通过观察知道,now_menu,控制着当前应该显示哪个界面
当环境正常的时候, now_menu 就默认从按键交互中的now_modeing, 得到所需显示的界面, 但是当 预警模式 触发的时候, alarming == 1, 就不再从按键交互的默认界面中显示, 而是我们直接在预警系统中 接管 now_menu 了。
此时, 接管后, 我们观察变量
预警判断里面设置的Oled变量
alarming = 1; now_menu = 3; button_down = 1;
正常模式下控制显示界面的变量
if(button_down == 1 && alarming == 0) { //选择当前模式(单独提取这个变量,是因为方便警报插手) now_menu = now_moding; }
此时, alarming = 1, 我们就不能进入上面正常模式下,控制的菜单, 或者说, 当前在预警触发的时候, 是不能进入的. 那我们就应急的挑选温度报警
我们进入温度报警代码里面查看, 毕竟我们要切换新界面, 所以我们整体刷新一次, 我们就利用一下按键刷新界面的变量, button_dwon = 1, 然后刷新一次后, 把相关变量置 0
不懂的可以看oled刷新模式
我们把button_down 置成 0后, 相当于, 我们整体刷新了一次, 后面就是单独的更新数据区域就可以了
![image-20240821111013037](https://img-blog.csdnimg.cn/img_convert/4d2f71665d7a8df014a3b7078b34b17e.png)
预警模式->正常模式
同理, 预警模式到正常模式, 也需要预警系统去检测, 当检测到, 环境恢复正常后, 我们才对OLED进行,界面更新, 我们把相关的标志位置 0 , 并且需要再次刷新 OLED界面, 所以我们就再利用一下 button_down, 模拟按键刷新, 先整体刷新, 后局部刷新。
如何检测到预警模式->正常模式?
我们预警系统, 通过判断, 一旦检测到 环境信息, 不超过阈值, 我们就代表着恢复正常, 我们就可以把相关的 预警标志位清零,
OLED界面,如何知道,我们预警标志位清零了,并且如何恢复警报前的界面
我们预警系统检测到环境恢复正常, 我们就要预警标志位清零了,
然后我们在挑选菜单的时候, 就相当于在正常模式下了。
我们正常模式下的, 预警前的界面,都保存在now_moding这个变量里面,所以不会丢失, 我们再次从这里面取出来就可以了。
( 这也是分离正常模式和预警模式,变量的好处,这样可以通过增加预警标志位,去干预显示哪个界面,只是我们要恢复的时候,记得把握整体逻辑即可 )