结合前面LED和按键控制,本章节加入呼吸灯操作,硬件方面并没有什么新的内容,我们主要是通过才软件上新的安排实现按键控制LED的不同效果展示。
通过按键A和按键B实现LED展示的不同模式的展示,例如按键A实现LED的闪烁,按键B实现LED的呼吸灯。
呼吸灯实际上就是PWM输出的控制,通过不断的调整占空比实现不同亮度的展示,这两个模式对于引脚来说控制是不一样的,在通过的MCU中PWM是通过定时器输出的,对应引脚需要配置为复用模式。
我们看一下PWM的初始化代码:
void my_pwm_init() {
// PWM Config
gpio_set_function(PICO_LED_PIN, GPIO_FUNC_PWM);
my_slice_num = pwm_gpio_to_slice_num(PICO_LED_PIN);
pwm_set_wrap(my_slice_num, 1000);
pwm_set_chan_level(my_slice_num, PWM_CHAN_B, 1);
pwm_set_clkdiv(my_slice_num, 50);
pwm_set_enabled(my_slice_num, true);
}所以我们在切换模式的时候要对LED进行重新初始化:
if(get_key(INKY_KEYA_PIN) == 1)
{
LED_init();
LED_mode = 1;
}
if(get_key(INKY_KEYB_PIN) == 1)
{
my_pwm_init();
LED_mode = 2;
}
if(LED_mode == 1)
{
LED_Toggle();
MY_DEV_Delay_ms(500);
}
else if(LED_mode == 2)
{
MY_DEV_Delay_ms(1);
PWM_cnt++;
if(PWM_cnt <= 1000)
{
pwm_set_chan_level(my_slice_num, PWM_CHAN_B, PWM_cnt);
}
else if(PWM_cnt <= 2000 && PWM_cnt > 1000)
{
pwm_set_chan_level(my_slice_num, PWM_CHAN_B, 2000-PWM_cnt);
}
else
{
PWM_cnt = 0;
}
} 通过按键对模式进行初始化并赋值,然后循环处理就可以,效果如下:
我要赚赏金
