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

共7条 1/1 1 跳转至

《墨水屏电子书》过程篇-呼吸灯

专家
2024-08-18 20:36:33     打赏

一、环境搭建

      上篇分享了开箱贴,接着开发入门篇,此次墨水屏DIY开发采用的IDE是Keil,其实Pico开发采用Python语言(Thonny)比较常见,随着树莓派的影响力不断壮大,树莓派也可以使用KeilVisual Studio Code等工具开发。既然使用Keil开发Pico,因此需要下载基于Keil的pack支持包,开发者可通过链接:https://www.keil.arm.com/packs/rp2xxx_dfp-raspberrypi/boards/,“RaspberryPi.RP2xxx_DFP.0.9.5.pack”直接安装即可。笔者采用MDK5.38.0.0,Arm Compiler6编译器。

二、电路原理图

LED原理图.png

GPIO25管脚.png

三、代码实现

    根据以上电路图LED的管脚分布,我们可知通过控制GPIO25管脚的高低电平输出即可控制LED灯的点亮与熄灭。这里引入PWM,实现呼吸灯效果。

#include "pico/stdlib.h"
#include "my_led.h"

#define MANUAL 

#define PICO_LED_PIN 25

void pwm_test(void);

void LED_init(){
		gpio_init(PICO_LED_PIN);
		gpio_set_dir(PICO_LED_PIN, GPIO_OUT);
}
void LED_ON(){
		gpio_put(PICO_LED_PIN, 0);
}

void LED_OFF(){
		gpio_put(PICO_LED_PIN, 1);
}

void my_SET_PWM(uint16_t Value);

static void system_init(void)
{
    extern void SystemCoreClockUpdate();

    SystemCoreClockUpdate();
  
}

int main(void) 
{
    system_init();
    LED_init();
    pwm_test();
    return 0;
}

void my_RUN_Breathe(void)
{
		static uint8_t pwm_Value=0;
		static uint8_t pwm_Direc=0;
#ifdef MANUAL
		my_SET_PWM(1);
		MY_DEV_Delay_ms(100);	
		my_SET_PWM(5);
		MY_DEV_Delay_ms(100);	
		my_SET_PWM(10);
		MY_DEV_Delay_ms(100);	
		my_SET_PWM(30);
		MY_DEV_Delay_ms(100);	
		my_SET_PWM(50);
		MY_DEV_Delay_ms(100);	
		my_SET_PWM(70);
		MY_DEV_Delay_ms(100);
		my_SET_PWM(90);
		MY_DEV_Delay_ms(100);				
		my_SET_PWM(110);
		MY_DEV_Delay_ms(100);	
		my_SET_PWM(130);
		MY_DEV_Delay_ms(100);
		my_SET_PWM(110);
		MY_DEV_Delay_ms(100);	
		my_SET_PWM(90);
		MY_DEV_Delay_ms(100);	
		my_SET_PWM(70);
		MY_DEV_Delay_ms(100);	
		my_SET_PWM(50);
		MY_DEV_Delay_ms(100);				
		my_SET_PWM(30);
		MY_DEV_Delay_ms(100);	
		my_SET_PWM(10);
		MY_DEV_Delay_ms(100);	
		my_SET_PWM(5);
		MY_DEV_Delay_ms(100);	
#else
    MY_DEV_Delay_ms(10);      
    if(pwm_Value == 0){  
        pwm_Direc = 0;  
    }  
    if(pwm_Value >= 100){  
        pwm_Direc = 1;  
    }  
    if(pwm_Direc == 0){      
        pwm_Value++;  
    }  
    else{  
        pwm_Value--;  
    }      
    my_SET_PWM(pwm_Value);  
#endif
}

uint my_slice_num;
void my_pwm_init(){
    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);
}

void my_SET_PWM(uint16_t Value)
{
    if(Value<0 || Value >1000){
    }else {
        pwm_set_chan_level(my_slice_num, PWM_CHAN_B, Value);
    }
}
void pwm_test(){
		my_pwm_init();
		while(1){
		    my_RUN_Breathe();
		}

}

根据以上代码可知,实现PWM呼吸灯效果可通过手动调节亮灭频率与算法自动调节两种方式实现,效果都是一样的,人的肉眼几乎是很难区分的。

四、脚本修改

    先按下Pico板上的BOOTSEL按钮,然后给Pico上电,此时电脑右下角会自动弹出盘符,笔者显示的是H盘符,因此需要将工程目录中的“axf2uf2.bat”文件修改成如下:

"..\..\tool\elf2uf2.exe" .\Objects\template.axf .\template.uf2
copy/B .\template.uf2  H:\

盘符提示.png

注意:修改完bat脚本文件中的指定路径,只需要将Pico板进入盘符烧录模式,再全编译工程即可将生成的uf2文件拷贝到Pico中,但这里需要注意的是需要将电脑中的杀毒软件卸载或退出,否则tool文件夹下的“elf2uf2.exe”会被清除掉,则导致不能将axf转化成uf2文件。

五、呼吸灯效果

呼吸灯效果.gif呼吸灯效果.zip




关键词: 墨水屏电子书     过程篇     呼吸灯    

专家
2024-08-19 00:11:53     打赏
2楼

感谢分享


专家
2024-08-19 00:14:38     打赏
3楼

感谢分享


专家
2024-08-19 00:16:38     打赏
4楼

感谢分享


菜鸟
2024-08-19 20:27:38     打赏
5楼

可以用透明FPC来做


高工
2024-08-20 16:08:30     打赏
6楼

看来树莓派的GPIO还真是靠谱啊


院士
2024-10-11 07:11:03     打赏
7楼

谢谢楼主的分享~!


共7条 1/1 1 跳转至

回复

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