结合前面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; } }通过按键对模式进行初始化并赋值,然后循环处理就可以,效果如下: