0
点赞
收藏
分享

微信扫一扫

如何在平台上实现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;

}

举报

相关推荐

0 条评论