昨天接到一个客户的更改功能需求,要求蓝牙未连接时红蓝灯互闪,连接成功后红灯灭,蓝灯呼吸(渐亮到渐灭,再由渐灭到渐亮),低电压时红灯呼吸,蓝灯保持原状态。
这个比较有意思,由于之前没做过,就花了一个小时整理了一下代码,最终效果也可以。
在led.c中加入以下子函数:
#if BT_LED_BREATH
void led_pwm_init(u16 led_pwm_nct)
{
JL_IOMAP->CON1 &= ~(BIT(11)|BIT(12)|BIT(13));
JL_IOMAP->CON1 |= BIT(12);
B_LED_PORT->DIR &= ~B_LED_BIT;
B_LED_PORT->PU |= B_LED_BIT;
B_LED_PORT->PD |= B_LED_BIT;
B_LED_PORT->DIE |= B_LED_BIT;
JL_TIMER2->CNT = 0;
JL_TIMER2->PWM = led_pwm_nct;//led_pwm_nct;//led_pwm_nct;//915;
JL_TIMER2->PRD = 6000;
JL_TIMER2->CON =BIT(0); //BIT(8)|BIT(0);
}
#endif // BT_LED_BREATH
然后在SDK原有的led_scan()函数实体中加入如下代码:
#if BT_LED_BREATH
if(is_pwm_en)
{
led_breath_pwm++;
if(led_breath_pwm>=2)
{
led_breath_pwm=0;
if(led_breath_sta==0)
{
led_pwm_cnt+=50;
led_pwm_init(led_pwm_cnt);
if(led_pwm_cnt>=6000)
led_breath_sta=1;
}
else
{
led_pwm_cnt-=50;
led_pwm_init(led_pwm_cnt);
if(led_pwm_cnt<=10)
led_breath_sta=0;
}
printf("led_pwm_cnt:%d",led_pwm_cnt);
}
}
else
#endif // BT_LED_BREATH
相关的变量自行定义。
#endif // BT_LED_BREATH 后面是SDK原来的代码
is_pwm_en这个标志位在蓝牙连接成功时置1,蓝牙未连接或者连接断开时置0,断开连接时记得再调用一次LED_INIT_EN();
相关变量和LED灯引脚配置完后,编译,下载,开机,连接,这时候蓝灯是呼吸效果了。
低电压时红灯的呼吸效果做法类似。