ZigBee TI ZStack CC2530 5.7 实例(三)多功能按键02-指示灯

简介: (配套源码、软件、开发板等资源,可移步博客同名QQ群/TB店铺:拿破仑940911) 上一节中讲述了如何实现基于系统时钟的多功能按键,本节将讲述对这一多功能按键的升级优化——添加指示灯。 一、实验内容及目的 多功能按键的功能虽然很好用,但是如果没有任何提示的,光靠人自己数数的估算按键时间的话,着实不是很好便。

(配套源码软件开发板等资源,可移步博客同名QQ群/TB店铺:拿破仑940911


上一节中讲述了如何实现基于系统时钟的多功能按键,本节将讲述对这一多功能按键的升级优化——添加指示灯。


一、实验内容及目的

多功能按键的功能虽然很好用,但是如果没有任何提示的,光靠人自己数数的估算按键时间的话,着实不是很好便。一般实际项目开发中,与多功能按键一起使用的,还会有一个指示灯。灯的状态就可以有很多了,灯的颜色、亮暗、是否闪烁以及闪烁快慢或频率等,不同的状态可以代表各种不同的提示信息!

因此,本次实验的内容就是为我们的多功能按键增加一个指示灯;目的是为了通过LED灯的状态,来提示用户按键时间的长短,从而更加人性化地实现”多功能“!具体实验现象将会是:

1、按键时间20ms ~ 5s  :LED指示灯无任何现象,保持熄灭的状态;

2、按键时间   5  s ~ 10s:LED指示灯以较高的频率(125ms/次)闪烁;

3、按键时间  10 s ~ 15s:LED指示灯切换到较低的频率(500ms/次)闪烁;

4、按键时间  15 s 以上  :LED指示灯重新回到熄灭的状态;

PS:每次松开按键,不管当前LED灯是什么状态,都会重新回到熄灭的状态,表示可以重新进行下一次按键操作。

二、实验的原理

当按键一开始被按下的时候,触发一次5000ms之后的按键时间判断,具体代码实现就是向Hal_TaskID任务发送一个HAL_KEY_TIME_EVT事件,5000ms之后触发:

void halProcessKeyInterrupt (void)
{
  ......
    if((PICTL & HAL_KEY_SW_1_EDGEBIT)==HAL_KEY_SW_1_EDGEBIT)//由于“下降沿”触发中断
    {
      ......
      osal_start_timerEx( Hal_TaskID, HAL_KEY_TIME_EVT, 5000);
    }
  ......
}

5000ms之后,Hal_TaskID任务的HAL_KEY_TIME_EVT事件被触发。Hal_TaskID任务的任务处理函数为hal_drivers.c文件中的Hal_ProcessEvent()函数,具体执行代码如下:

  if ( events & HAL_KEY_TIME_EVT )
  {
    processHalKeyTimeEvt();
    return (events ^ HAL_KEY_TIME_EVT);
  }

此处增加的这段代码,其实就是为Hal_ProcessEvent()函数增加了一个事件处理分支,而这个事件的定义放在了hal_drivers.h文件中:

#define HAL_KEY_TIME_EVT      0x0010

由此可以看出,实际处理的函数其实是processHalKeyTimeEvt()。该函数的声明与定义也都放在了hal_drivers.c文件中。如下:

void processHalKeyTimeEvt( void );
void processHalKeyTimeEvt( void )
{
  if (HAL_PUSH_BUTTON1())
  {
    uint32 interval = osal_GetSystemClock() - HAL_KEY_starting_time;

    if(interval >= 10000)
    {
      HalLedBlink( HAL_LED_2, 10, 50, 500 ); //慢闪
    }
    else if(interval >= 5000)
    {
      HalLedBlink( HAL_LED_2, 40, 50, 125 ); //快闪
      osal_start_timerEx( Hal_TaskID, HAL_KEY_TIME_EVT, 5000);
    }
  }
}

从最初按下按键,到执行到这个函数,已经过去了5000ms,也就是5s。如果此时按键仍然保持被按下的状态,则LED指示灯进入“快闪”状态。与此同时,再触发一次5000ms之后的按键时间判断。再过5s之后,如果按键依旧保持被按下的状态,则LED指示灯进入“慢闪”状态。

每次按键一旦松开,OnBoard_KeyCallback()函数中,都会调用OnBoard_SendKeys()函数,将按键信息发送到应用层任务。这里我们在发送按键信息到应用层任务之前,就先将LED指示灯恢复到默认熄灭的状态。具体代码实现为调用一次LED闪烁函数——HalLedBlink( ),重新指定LED灯的状态为闪烁一次即停止闪烁:

void OnBoard_KeyCallback ( uint8 keys, uint8 state )
{
  ......
  HalLedBlink( HAL_LED_2, 1, 50, 100 ); //停止闪烁
  ......
}
具体效果就是每次一旦松开按键,不管当前LED灯是什么状态,都会立即重新回到熄灭的状态。

三、实验验证

1、编译下载

本次实验验证只需要一个ZigBee设备即可完成,这里我们选择“CoordinatorEB”编译下载:

2、实验现象

下载成功之后,除了有上一节中的实验现象之外,还可以看到LED指示灯同步闪烁!

此处实验现象在博客中不方便呈现,大家自己验证即可。源码请自行去文首或文末的百度网盘链接中下载。


(配套源码软件开发板等资源,可移步博客同名QQ群/TB店铺:拿破仑940911

相关文章
|
传感器 物联网
( zigbee)CC2530+BH1750光敏传感器获取光照强度
( zigbee)CC2530+BH1750光敏传感器获取光照强度
677 0
( zigbee)CC2530+BH1750光敏传感器获取光照强度
|
物联网
ZigBee(CC2530)最小系统PCB设计(AD18开发软件)
ZigBee(CC2530)最小系统PCB设计(AD18开发软件
ZigBee(CC2530)最小系统PCB设计(AD18开发软件)
|
物联网
ZigBee TI ZStack CC2530 2.3 协议栈版本
(配套源码、软件、开发板等资源,可移步博客同名QQ群/TB店铺:拿破仑940911) 一、协议栈发展历史 TI的ZigBee 协议栈Z-Stack,从最开始的Z-Stack 0.1到大家熟悉的ZStack-CC2530-2.5.1a,再到几个月前刚刚发布的最新版本——Z-Stack 3.0.1,历经了非常多的版本。
3179 0
|
移动开发 物联网 流计算
ZigBee TI ZStack CC2530 3.12 LED驱动移植及使用
(配套源码、软件、开发板等资源,可移步博客同名QQ群/TB店铺:拿破仑940911) 一、前言 关于Z-Stack协议栈中的LED控制,如果使用协议栈中自带的驱动,很简单就可以实现非常丰富的功能。
1957 0
|
物联网
ZigBee TI ZStack CC2530 3.14 按键驱动01-轮询模式
(配套源码、软件、开发板等资源,可移步博客同名QQ群/TB店铺:拿破仑940911) 在Z-Stack协议栈中,对于按键的检测,分为两种不同的机制,分别称为“轮询模式”和“中断模式”,类比单片机中的按键检测,还是很好理解的。
1649 0
|
物联网
ZigBee TI ZStack CC2530 3.15 按键驱动02-中断模式
(配套源码、软件、开发板等资源,可移步博客同名QQ群/TB店铺:拿破仑940911) (配套源码、软件、开发板等资源,可移步博客同名QQ群/TB店铺:拿破仑940911)
1260 0
|
物联网
ZigBee TI ZStack CC2530 2.6 选择开发板和下载器
(配套源码、软件、开发板等资源,可移步博客同名QQ群/TB店铺:拿破仑940911) 一、ZigBee开发板 关于ZigBee的开发板,等大家接触一段时间后就会发现,市面上在售的ZigBee开发板中,TI的CC2530开发板居多。
1799 0
Adobe XD CC 55.2.12.2 是一款非常专业的矢量图形规划软件Adobe XD 2023版本软件下载安装教程(内含所有版本)
Adobe XD CC 55.2.12.2 是一款非常专业的矢量图形规划软件,全新的桌面端UX原型工具,这是新一代网页与移动应用的UX设计工具。xd能够帮助设计者快速有效的设计图形、建立手机APP以及网站原型等等设计制作,支持设备的尺寸多样。集原型、设计和交互等功能于一体,从网站和移动应用程序到语音交互都可轻松实现,Adobe XD CC带来了响应调整大小、自动动画、语音原型、插件和应用程序集成等新功能,
Adobe Photoshop CC 2019下载中文永久安装和破解教程
Adobe Photoshop CC 2019下载中文永久安装和破解教程
49569 0
Animate CC 2019免费下载丨Adobe Animate CC 2019下载中文完整版永久安装教程
Adobe 提供了一整套可互相配合使用的动画应用程序,助您实现所有创意。使用 Animate CC 创建适用于游戏、应用程序和 Web 的交互式矢量动画。利用 Character Animator CC 将人物实时制成动画。
8245 0