如何在平台上实现LED灯的效果?如信号灯,来短信/来电时LED动画闪烁

平台预留了一些GPIO与外部LCD/LED/振动器相连,能控制实现一些播放效果。 
LED灯引脚三个;对应如下三种颜色的LED灯(查看函数custom_get_led_label) 
GPIO_DEV_LED_STATUS_1:LED_RED 
GPIO_DEV_LED_STATUS_2:LED_GREEN 
GPIO_DEV_LED_STATUS_3:LED_BLUE 
平台默认定义了多种LCD/LED/VIB播放模式;(查看custom_led_patterns.h中枚举体PATTERN_ID) 
LED播放模式例举有: 
 LED_POWER_ON = LED_PATTERN_BEGIN, //开机闪烁模式 
 LED_POWER_OFF, //关机闪烁 
 LED_BATTERY_WARNING,  
 LED_BATTERY_LOW, //低电量 
 LED_Connect900, //信号灯效果 
 LED_Connect1800, //信号灯效果 
除了原有的模式,可以客制化增加自己的动画模式,以上模式枚举出了ID,真正的模式实现如下: 
LED灯烁模式(默认20种)存放于数组led_gpio_patterns[]中,具体对应为: 
const LED_PATTERN_STRUCT *led_gpio_patterns[] =  

 led_gpio_ptn1, 
 led_gpio_ptn2, 
 led_gpio_ptn3, 
 led_gpio_ptn4, 
 led_gpio_ptn5, 
 led_gpio_ptn6, 
 .......... 
}; 
模式数组中,例举第一种闪烁模式的具体实现如下, 
其中前三列分别代表RED/GREEN/BLUE的模式;最后一列表示LED亮度持续时间。 
具体播放该模式时,会逐行播放,知道取到最后一行的持续时间为0,表示播放结束。 
const LED_PATTERN_STRUCT led_gpio_ptn1[] =  

 /* red ligth 1, green ligth 2, blue light 3, duration time */ 
 {{LED_LEVEL_5, LED_LEVEL_0, LED_LEVEL_0}, 500}, 
 {{LED_LEVEL_0, LED_LEVEL_5, LED_LEVEL_0}, 500}, 
 {{LED_LEVEL_0, LED_LEVEL_0, LED_LEVEL_5}, 500}, 
 {{LED_LEVEL_5, LED_LEVEL_5, LED_LEVEL_0}, 500}, 
 {{LED_LEVEL_0, LED_LEVEL_5, LED_LEVEL_5}, 500}, 
 {{LED_LEVEL_5, LED_LEVEL_0, LED_LEVEL_5}, 500}, 
 {{LED_LEVEL_0, LED_LEVEL_0, LED_LEVEL_0}, 0} /* duration timer is zero to terminate it */ 
}; 
LED的亮度等级定义为六种:对应了LED灯的强度。 
 #define LED_LEVEL_0 0 
 #define LED_LEVEL_1 1 
 #define LED_LEVEL_2 2 
 #define LED_LEVEL_3 3 
 #define LED_LEVEL_4 4 
 #define LED_LEVEL_5 5 
做出如上模式定义后,播放LED模式的函数为: 
kal_bool uem_play_pattern(PATTERN_ID pattern_id, PATTERN_TYPE pattern_type); 
函数kal_bool uem_play_pattern(PATTERN_ID pattern_id, PATTERN_TYPE pattern_type); 
最终会调用底层接口: 
kal_bool custom_cfg_gpio_set_level(kal_uint8 gpio_dev_type, kal_uint8 gpio_dev_level ) 
该函数可控制实现拉高拉低某个引脚; 
例如配置RED LED后,具体在此函数中实现拉高拉低LED引脚的功能: 
kal_bool custom_cfg_gpio_set_level(kal_uint8 gpio_dev_type, kal_uint8 gpio_dev_level ) 

 case GPIO_DEV_LED_STATUS_1: 
 if( gpio_dev_level == LED_LIGHT_LEVEL0) 
 GPIO_WriteIO(GPIO_ON, gpio_led_status_en_pin); 
 else 
 GPIO_WriteIO(GPIO_OFF, gpio_led_status_en_pin); 
 break; 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值