DE | EN | CN

ESE模块5 按钮和LED

到现在我们仅使用了非常简单的库块。接下来我们将使用具有更广泛功能的更复杂的模块。我们将看到PEC库中高度开发的组件如何使我们的工作变得更加轻松。我们接下 来做一个稍微复杂的任务。

任务

开发微控制器应用程序,通过单击按钮选择新功能并通过LED闪烁代码对LED进行可视化。

该解决方案应满足以下要求:

  • 系统启动时,显示屏LED熄灭
  • 如果用户短暂按下按钮(单击),则LED应按代码的指示进行闪烁
  • 每再单击一次,闪烁代码应进一步计数
    • 1次单击=闪烁1;2次单击=闪烁2;3次单击=闪烁3
    • 等…
  • 如果用户长时间按住按钮(2秒钟以上),则LED显示关闭
  • 按钮在引脚A0上,LED在引脚B0上

SRS Button and LED

准备

进行以下准备工作:

  • 创建一个新的类图
  • 目标语言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():void
app.indicatorLED.nextBlinkCode();

FunctionKey::onHoldStart():void
app.indicatorLED.off();

UML类的构造和设计相对会比较复杂一点,但我们只需要编写很少的代码就可以了。现在我们就可以构建和测试该应用程序。

测试

翻译程序。将可执行程序传送到控制器的程序存储器中。

  • 1. 创建(编译和链接)
  • 2. 烧录
  • 3. 连接…

总结

  • 1.创建并打开类图
  • 2.使用模板
  • 3.使用导航器和浏览器
  • 4.使用库块
  • 5.连接类
  • 6.覆盖操作
  • 7.在操作中创建源代码
  • 8.在类图中创建并刻录ARM应用程序

练习

长时间(如3s)按住(onHoldEnd)按钮后再释放 , LED就会短暂闪烁(flash)。

继续:

搜索关键词