网上有很多人研究如何去抖一个按钮。但是,其中一些提供的实现和策略通常缺乏可伸缩性、可移植性以及轻松消除多个按钮的能力,它们还与设计运行它们的硬件紧密耦合。嵌入式开发人员创建可重用的去抖算法有七个简单的步骤,几乎可以在任何嵌入式系统中使用。
步骤 1——定义软件架构
定义软件架构应该是软件开发人员“要做的事情”清单上的第一项。软件架构就像一张蓝图,告诉开发人员正在开发什么。跳过架构阶段就像是在没有预先考虑建筑物有多高或有多少层的情况下,决定即时建造一座摩天大楼。对于按钮去抖算法,可以使用非常简单的分层架构。
技巧2——概述API
应用程序编程接口(API)是开始开发可重用软件的好方法。API定义了函数和对象,并为开发应用程序提供了构建模块。API允许抽象出底层细节,即实现。
对于开关去抖算法,有三个开发人员感兴趣的主要接口:初始化例程、去抖功能和状态机。嵌入式开发人员可能还对第四个函数感兴趣,用于检索按钮的去抖状态。
技巧3——识别按钮状态
每个应用程序对按钮可能占据的状态都有不同的要求。非常简单的应用程序可能只有NOT_PRESSED和PRESSED。一个复杂的应用程序可能有更多的状态,比如检测一个按钮何时被释放或者在一个定义的时间窗口内被按下了多少次。一个正确定义的API并不关心这些不同的状态,而是可以在实现中或通过配置层轻松处理所有可能的状态。
提示4——选择实现类型
定义一个API是抽象出按钮去抖算法如何工作的实现细节的好方法,但是有时候开发者需要决定这些细节是什么。在软件中有许多不同的方法去抖一个按钮。最简单的方法是读取引脚状态,延迟一段去抖时间,然后再次读取引脚。然而,使用延迟方法并不是特别有效,也不总是正确的。按钮去抖的更常见的实现将周期性地对引脚进行采样,并且只有在“x”个样本连续读取相同值之后,按钮才会被认为是去抖的。您选择的实现可能取决于初始需求和目标应用程序。
技巧5——设计流程图
了解实现细节的最简单方法是在编写一行代码之前绘制实现流程图。流程图允许嵌入式开发人员将他们的思想集中在他们将要编写的代码上。总是存在绕过流程图直接写代码的诱惑。然而,首先编写代码总是导致不得不一遍又一遍地重写代码。
技巧6——现在,编写代码
编写嵌入式软件只能在API和流程图开发完成后进行。有了流程图,编写嵌入式软件就像将流程图翻译成开发人员选择的语言一样简单。
技巧7——测试和验证
最后,在完成了前面的六个步骤之后,现在是时候测试和验证所选择的实现和设计是否真的有效了。测试去抖算法的一种方法是选择一个低成本开发套件,如STM32 Nucleo板,并编写一些应用代码,使板载按钮去抖并打开LED。对于测试来说,保持简单,如果按钮在按下状态下去抖,则打开LED,否则关闭LED。
结论
与一次性编写代码相比,编写可重用的代码并不需要花费更多的时间或成本。花一点时间预先考虑一个API,选择一个实现,并设计流程图,这将比前期投资节省更多的后端时间。这些步骤演示了如何开发可重用的按钮算法,但是这些相同的步骤和策略也可以应用于嵌入式开发人员将为嵌入式系统使用或开发的几乎任何组件。