这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【墨水屏电子书】过程贴-实现呼吸灯的控制

共4条 1/1 1 跳转至

【墨水屏电子书】过程贴-实现呼吸灯的控制

高工
2024-08-06 17:49:06     打赏

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

image.png


专家
2024-08-06 19:18:33     打赏
2楼

感谢分享


高工
2024-08-06 19:33:43     打赏
3楼

感谢分享


专家
2024-08-06 19:36:30     打赏
4楼

感谢分享


共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]