mt2503 如何在平台上实现LED灯的效果?如信号灯,来短信/来电时LED动...
时间:10-02
整理:3721RD
点击:
[php?mod=tag&id=6090" target="_blank" class="relatedlink">Framework]如何在平台上实现LED灯的效果?如信号灯,来短信/来电时LED动画闪烁
[DESCRIPTION]
如何在平台上实现LED灯的效果?如信号灯,来短信/来电时LED动画闪烁
[SOLUTION]
平台预留了一些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[]中,具体对应为:
constLED_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,表示播放结束。
constLED_PATTERN_STRUCTled_gpio_ptn1[]=
{
/*redligth1,greenligth2,bluelight3,durationtime*/
{{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}/*durationtimeriszerototerminateit*/
};
LED的亮度等级定义为六种:对应了LED灯的强度。
#defineLED_LEVEL_00
#defineLED_LEVEL_11
#defineLED_LEVEL_22
#defineLED_LEVEL_33
#defineLED_LEVEL_44
#defineLED_LEVEL_55
做出如上模式定义后,播放LED模式的函数为:
kal_booluem_play_pattern(PATTERN_IDpattern_id,PATTERN_TYPEpattern_type);
函数kal_booluem_play_pattern(PATTERN_IDpattern_id,PATTERN_TYPEpattern_type);
最终会调用底层接口:
kal_boolcustom_cfg_gpio_set_level(kal_uint8gpio_dev_type,kal_uint8gpio_dev_level)
该函数可控制实现拉高拉低某个引脚;
例如配置REDLED后,具体在此函数中实现拉高拉低LED引脚的功能:
kal_boolcustom_cfg_gpio_set_level(kal_uint8gpio_dev_type,kal_uint8gpio_dev_level)
{
caseGPIO_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;
}
[DESCRIPTION]
如何在平台上实现LED灯的效果?如信号灯,来短信/来电时LED动画闪烁
[SOLUTION]
平台预留了一些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[]中,具体对应为:
constLED_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,表示播放结束。
constLED_PATTERN_STRUCTled_gpio_ptn1[]=
{
/*redligth1,greenligth2,bluelight3,durationtime*/
{{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}/*durationtimeriszerototerminateit*/
};
LED的亮度等级定义为六种:对应了LED灯的强度。
#defineLED_LEVEL_00
#defineLED_LEVEL_11
#defineLED_LEVEL_22
#defineLED_LEVEL_33
#defineLED_LEVEL_44
#defineLED_LEVEL_55
做出如上模式定义后,播放LED模式的函数为:
kal_booluem_play_pattern(PATTERN_IDpattern_id,PATTERN_TYPEpattern_type);
函数kal_booluem_play_pattern(PATTERN_IDpattern_id,PATTERN_TYPEpattern_type);
最终会调用底层接口:
kal_boolcustom_cfg_gpio_set_level(kal_uint8gpio_dev_type,kal_uint8gpio_dev_level)
该函数可控制实现拉高拉低某个引脚;
例如配置REDLED后,具体在此函数中实现拉高拉低LED引脚的功能:
kal_boolcustom_cfg_gpio_set_level(kal_uint8gpio_dev_type,kal_uint8gpio_dev_level)
{
caseGPIO_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;
}
666666
6666666