博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何在平台上实现LED灯的效果?如信号灯,来短信/来电时LED动画闪烁
阅读量:4043 次
发布时间:2019-05-24

本文共 2020 字,大约阅读时间需要 6 分钟。

平台预留了一些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; 
}

转载地址:http://osrdi.baihongyu.com/

你可能感兴趣的文章
linux printf获得时间戳
查看>>
C语言位扩展
查看>>
linux irqdebug
查看>>
git 常用命令
查看>>
linux位操作API
查看>>
uboot.lds文件分析
查看>>
uboot start.s文件分析
查看>>
没有路由器的情况下,开发板,虚拟机Ubuntu,win10主机,三者也可以ping通
查看>>
本地服务方式搭建etcd集群
查看>>
安装k8s Master高可用集群
查看>>
忽略图片透明区域的事件(Flex)
查看>>
忽略图片透明区域的事件(Flex)
查看>>
AS3 Flex基础知识100条
查看>>
Flex动态获取flash资源库文件
查看>>
flex4 中创建自定义弹出窗口
查看>>
01Java基础语法-16. while循环结构
查看>>
01Java基础语法-18. 各种循环语句的区别和应用场景
查看>>
01Java基础语法-19. 循环跳转控制语句
查看>>
Django框架全面讲解 -- Form
查看>>
socket,accept函数解析
查看>>