ESE模块5 按钮和LED
到现在我们仅使用了非常简单的库块。接下来我们将使用具有更广泛功能的更复杂的模块。我们将看到PEC库中高度开发的组件如何使我们的工作变得更加轻松。我们接下 来做一个稍微复杂的任务。
任务
开发微控制器应用程序,通过单击按钮选择新功能并通过LED闪烁代码对LED进行可视化。
该解决方案应满足以下要求:
- 系统启动时,显示屏LED熄灭
- 如果用户短暂按下按钮(单击),则LED应按代码的指示进行闪烁
- 每再单击一次,闪烁代码应进一步计数
- 1次单击=闪烁1;2次单击=闪烁2;3次单击=闪烁3
- 等…
- 如果用户长时间按住按钮(2秒钟以上),则LED显示关闭
- 按钮在引脚A0上,LED在引脚B0上
准备
进行以下准备工作:
- 创建一个新的类图
- 目标语言ARM C ++
- 目标平台STM32F042 mySTM32板灯HAL
- 下载PEC应用程序(XMC,STM32,AVR)的图表模板应用程序基本结构
- 为STM32F0分配驱动程序包
- (可选)分配模板stm32F042_48Mhz
解决路径
任务是区分单击按钮和按住按钮的区别。看一下PEC库和库模块PecButtonClickAndHold。我们先将此新组件与以前使用的PecPinInput进行比较。
当查看构建基块时,差异非常明显。PecPinInput只能配置和查询状态。PecButtonClickAndHold就复杂些。它还具有PecPinInput的功能,和与PecAppModul的一对一关系以及其他行为功能,例如onClick,onHoldStart,isPressed和waitForPress。
PecAppModule的属性意味着PecButtonClickAndHold是活动类。可以自动执行自己的行为特征,作为一项单独的任务,而无需操作人员再做编程。 例如,onClick操作就是这种情况。按钮会意识到被单击,无需进行任何编程。该名称已经暗示onClick是所谓的事件。
如果以后更深入地使用UML,就会了解这些倾斜字体的确切含义。作为初学者,可以先简单理解为行为特征。 专业人士称此为覆盖虚拟功能。 该工具会为我们提供非常有效的支持。
总之,可以说PecButtonClickAndHold库模块可以满足我们所需的一切功能。
为LED这次我们也同样使用更复杂的库模块,就是PecLED。 我们再次将它与简单的PecPinOutput进行比较。
在这里PecAppModul也引起了我们的注意。 显然PecLed也会自行完成应做的任何事情。</del> 行为特征列表已经告诉我们PecLed可以做什么。 除了简单地打开,关闭和切换外(on, off, toggle),还可以眨,闪烁,变暗和短暂闪烁(blink, flicker, dim, flash)。此组件也可以完成我们需要的所有操作。
让我们简要总结一下我们需要哪些系统组件:
按钮和LED连接到控制器,我们已经知道所需的库块以及我们要连的事件。 设计图如下所示:
注意:倾斜的行为特征=允许覆盖
为了实现,以下是作为定位用例场景的功能要求:
实现
实现应包括上述设计图草图中描述的元素。 然后逐步形成以下的稍复杂的设计图。
首先我们执行已知的步骤:
- •创建FunctionKey类并连接到控制器
- •创建IndicatorLED类并连接到控制器
- •将PecButtonClickAndHold库块拖到图中,再连接到FunctionKey类
- •将PecLED库块拖到图中,再连接到IndicatorLED类
设计草案如下图所示。 请先验证类模型。
在下一步中,我们要通过覆盖这些行为特征来保留onClick和onHoldStart事件。覆盖意味着我们的用户类包含具有相同名称的操作。编译器会自动识别出,在调用这些事件时,不是调用库中PEC块的操作,而是调用应用程序中的操作。进行如下:
- • 将操作元素从对象库拖到FunctionKey类
- • 该工具提供所有可重写的操作,以便在对话框中选择
- • 选择ButtonClickAndHoldBase :: onClick()
- • 单击完成按钮确认选择
对onHoldStart操作重复这些步骤。
这些步骤之后,类模型应如下所示。 请验证类图。
现在我们可以输入所需功能的C ++代码。
FunctionKey::onClick():voidapp.indicatorLED.nextBlinkCode();
FunctionKey::onHoldStart():voidapp.indicatorLED.off();
UML类的构造和设计相对会比较复杂一点,但我们只需要编写很少的代码就可以了。现在我们就可以构建和测试该应用程序。
测试
总结
- 1.创建并打开类图
- 2.使用模板
- 3.使用导航器和浏览器
- 4.使用库块
- 5.连接类
- 6.覆盖操作
- 7.在操作中创建源代码
- 8.在类图中创建并刻录ARM应用程序
练习
长时间(如3s)按住(onHoldEnd)按钮后再释放 , LED就会短暂闪烁(flash)。