一、环境搭建
上篇分享了开箱贴,接着开发入门篇,此次墨水屏DIY开发采用的IDE是Keil,其实Pico开发采用Python语言(Thonny)比较常见,随着树莓派的影响力不断壮大,树莓派也可以使用Keil,Visual 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的管脚分布,我们可知通过控制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:\
注意:修改完bat脚本文件中的指定路径,只需要将Pico板进入盘符烧录模式,再全编译工程即可将生成的uf2文件拷贝到Pico中,但这里需要注意的是需要将电脑中的杀毒软件卸载或退出,否则tool文件夹下的“elf2uf2.exe”会被清除掉,则导致不能将axf转化成uf2文件。
五、呼吸灯效果