PCA9685的配置学习
在程序的世界里,bug 就像隐藏在暗处的小怪兽,时不时跳出来捣乱。而职业生涯中,总有那么一个或几个 bug 让我们刻骨铭心。它或许让项目差点夭折,或许让你熬了无数个通宵,或许有着离奇的出现方式和曲折的解决过程。无论是代码中的逻辑混乱,还是环境配置引发的灾难,亦或是多人协作产生的诡异问题,都可以在这里分享。把你职业生涯里遇到或写过的最大 bug 故事讲出来,让大家一起感受那些惊心动魄、哭笑不得的瞬间,也为后来人敲响警钟吧。
pca9685的配置,这篇文章写的不错,我是参考这个来配置的
PCA9685模块使用(Arduino和STM32)-CSDN博客
bug问题描述
上电,舵机复位。条件满足触发,舵机会一直复位再转到设置的角度。会抖动的很厉害。
bug解决过程
debug断点调试,一步一步运行,发现没有明显抖动。debug直接无断点运行还是会抖动。推测单步运行正常证明程序的语法和功能没问题,是delay的时间导致。减小delay时间,舵机抖动的更加厉害;增加delay的时间,发现舵机是先复位再执行到设定角度的。对比程序,发现PCA9685_ini(60,105);这个函数也有对各路pwm的输出设置。在这里就是重复设置pwm的输出了。
解决方法PCA9685_ini(60,105);这个函数只需要在while(1)前面初始化一次即可。后面触发条件控制舵机可以使用PCA9685_setPWM(0,0,0);来设置。同一个通道的PWM变化要有足够的delay时间,来给pwm做出反应。
bug经验教训
对函数的功能了解不够清晰,不能一味地的copy代码,要理解函数功能。函数的初始化最好在while(1)之前完成。