当前位置:首页 > 公众号精选 > 嵌入式云IOT技术圈
[导读]前几天我在世伟兄的开源群上分享了这个框架,有群友希望我用这个框架写一个小项目,于是我就突发奇思妙想,在1-2天内设计规划了这个一个课题:基于小熊派简易气体探测仪。

废话不多说,先上视频,配合个人简单的讲解,看看具体的展示效果:

关于表驱动,之前也分享过一篇文章:

C语言表驱动法编程实践(精华帖,建议收藏并实践)

两年前,我也曾在Github上开源过一个基于结构体数组的表驱动菜单框架,如下:

这个框架应付一些与按键、LCD交互的案子可以说是非常简单且高效,所以这些年,凡是自己副业或者主业公司做的任何一个项目只要涉及到类似的思想,那么我基本都会沿用这套框架来做,可以说这套框架已经给我挣了不少项目钱了;收获还是蛮大的!Github上还放置了我当时写的PPT,是我当时根据项目大致的需求写的,但是由于产品需求的不确定性,老是变来变去(说实话我真的非常讨厌这样子,以前很讨厌,现在极度讨厌,因为没有明确的需求却还要干着低效率且没有意义的活,简直是浪费资源&&浪费时间&&浪费生命),后面直接舍弃了这个框架,沿用最简单的思维去做,因为可能当事人他自己都不知道要做成什么样子,毕竟没有明确需求的东西不值得提复用性把它做得高逼格,所以只能用简单的思路去做了;简单的框架思维当然就没有这个好,这个PPT也就闲置下来了。当然不同的产品可以根据自己的需求定制修改,这么好用的东西难道不分享?肯定要分享啦!

总结

没有明确需求的产品,别提什么复用性和高逼格!因为那最终修修补补写出来的代码会比屎还难看!我相信你的前同事技术如果真的很菜的话,当项目需求明确且项目时间充足的时候,你甚至希望花10天时间将他的代码推倒重写也不会继续去维护他的垃圾代码。

1、当时写的PPT分享

前几天我还在世伟兄的开源群上分享了这个框架,有群友希望我用这个框架写一个小项目,于是我就突发奇思妙想,在1-2天内设计规划了这个一个课题:基于小熊派简易气体探测仪。

该项目复用了之前写小熊派例程相关的代码,至于是怎么实现的,请自行阅读代码或者翻看以前的文章了解。

2、核心框架结构

先来看下这个框架的核心数据结构与操作方法,位于该项目的menu.h、menu.c

menu.h

typedef void (*menu_op_func)(uint8_t);
typedef struct OP_STRUCT
{
 int op_menu ;         /*操作菜单*/
 menu_op_func opfun ;  /*带参数的操作方法*/
}OP_MENU_PAGE;


void Enter_Page(uint8_t index,uint8_t KeyValue);
void Menu_Select_Item(uint8_t current_index, uint8_t KeyValue);

menu.c

/*菜单操作表定义*/
static OP_MENU_PAGE g_opStruct[] = 
{
 {SLEEP_PAGE     , sleep_page_process},
 {MAIN_PAGE      , main_page_process}, 
 {TEST_PAGE      , test_page_process},
 {VERSION_PAGE   , version_info_page_process},
};

/*跳转到表所对应的页面*/
static int JUMP_Table(int8_t op , uint8_t KeyValue)
{
 assert(op >= sizeof(g_opStruct)/sizeof(g_opStruct[0]));
 assert(op < 0);
 g_opStruct[op].opfun(KeyValue);
 return 0 ;
}

/*菜单选择项*/
void Menu_Select_Item(uint8_t current_index, uint8_t KeyValue)
{
 JUMP_Table(current_index , KeyValue);
}

这个框架比网上现有的一些菜单框架好就好在它更灵活,因为它多了一个uint8_t的形参,该形参可以作为事件值进行传递,每个页面都可以响应当前收到的某个事件值然后执行相应的应用逻辑,事实上它就是这么做的。

对比下之前我发的一篇文章(开源按键组件MultiButton支持菜单操作(事件驱动型))里某个写得杂乱无章的通用菜单框架,是不是觉得我的这个更加灵活呢?当然结合这个框架,我们是否还能将MultiButton也与它绑定在一起呢?


如果您更好的优化思路或者更好的框架思想,欢迎与我一起共同学习交流分享。

3、小熊派简易气体探测器实战项目框架

项目基于开源软件定时器multi_timer进行维护管理:

  • (1)Key_Timer定时器用于按键长短按的扫描
  • (2)DataTime_Timer定时器用于实时时钟显示
  • (3)Test_Timer定时器用于核心检测逻辑实现

3.1、按键交互逻辑

其中,在主页面中,通过短按按键可以横向切换菜单项,通过短按右键可以进入菜单项,分别为:

  • 测试(核心检测逻辑)
  • 上传(未实现)
  • 版本(查看版本信息)

在不同页面中,可以根据界面提示退出回到主菜单。

在主页面中,长按左键可以让设备进入低功耗模式(关背光),继续长按左键可以点亮屏(开背光)

3.2、核心检测逻辑

其中核心检测逻辑主要由四部分组成,分别是:

  • 基准
  • 检测
  • 安全
  • 危险

基准

那么什么是基准呢?基准在这里的含义是为了判断当前传感器的状态是否稳定,能够进行检测的条件,在这里我设置的气体基准条件为阈值的1/2,阈值的定义在test_ui.h中:

#define ALARM_THRESHOLD 600 //600ppm

基准通过的条件:

当前获取的气体传感器ppm < 1/2阈值,连续计数自加超过10次,则认为此时传感器已经稳定了,这时候可以进入检测状态,当前这个次数可以通过参数设置进行调节,后续可以继续在本项目中拓展该功能。

检测

当进入检测状态以后,继续读取气体传感器的ppm值,如果在10s内,也就是进度条跑满了以后,ppm值仍小于自定义阈值,那么就跳转为安全的状态。

当进入检测状态以后,继续读取气体传感器的ppm值,如果在10s内,ppm值大于于自定义阈值连续20次,那么就跳转为危险的状态。

安全

画面显示安全,当重新按下左键即回到基准的流程。

危险

画面危险闪烁,LED报警灯以100ms频率闪烁,蜂鸣器以100ms频率交替响灭。

在测试页面任一状态下,长按左键直接显示安全,短按右键退出回到主菜单。

事实上,市面上大部分类似的仪器仪表检测产品都是差不多的实现逻辑,我们只要明白了基本原理,把整个项目功能框架搭出来,后续就可以根据实际需求进行随意拓展了。

其余功能:后续还可以做报警记录存储、数据上传到OneNet或者华为云等平台、参数设置等等,总之这个项目可拓展性非常强,这些功能将在本项目开发的下一章节持续进行拓展并分享,欢迎及时关注我的码云仓库与微信公众号文章更新。

本节代码已同步到码云的代码仓库中:

获取方法如下:

1、新建一个文件夹

2、使用git clone远程获取小熊派所有案例代码

我还将之前做的一些项目以及练习例程在近期内全部上传完毕,与大家一起分享交流:

公众号粉丝福利时刻

这里我给大家申请到了福利,本公众号读者购买小熊派开发板可享受9折优惠,有需要购买小熊派以及腾讯物联网开发板的朋友,淘宝搜索即可,跟客服说你是公众号:嵌入式云IOT技术圈 的粉丝,立享9折优惠!

往期精彩

TencentOS tiny RTOS快速入门

"结构体"和"共用体"在单片机中的妙用

记一个OLED编程中文显示函数的坑(留意变量数据类型的范围)

上海出差之行--领略外滩美景、RT-Thread总部之旅、嵌友面基、返程记录

觉得本次分享的文章对您有帮助,随手点[在看]并转发分享,也是对我的支持。

免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭