在将多个模块程序融合到一个Arduino项目中时,发现红外遥控功能无法正常工作。经过检查,发现红外程序(红外库)和我的定时器程序都使用了定时器2,导致冲突。
arduino红外库使用了定时器2。
解决过程:
- 排查问题原因:
- 首先检查了红外遥控模块的代码,发现它使用了定时器2来控制红外信号的发送频率。
- 回顾了自己的定时器程序,也发现它使用了定时器2来执行某些周期性任务。
- 由于两个程序都使用了相同的定时器,导致了冲突,使得红外遥控功能无法正常工作。
- 查阅文档和资料:
- 为了解决冲突,我查阅了Arduino的官方文档和相关资料,了解了Arduino板上可用的定时器及其配置方法。
- 我发现除了定时器2,Arduino Uno还提供了定时器0、定时器1等其他定时器资源。
- 修改定时器程序:
- 考虑到红外遥控模块的代码是现成的,需要修改的话,得修改底层库,且已经经过测试,我决定保留它的定时器设置,即继续使用定时器2。
- 因此,将定时器程序中的定时器2改为定时器1。通过调整代码中的定时器配置部分
注意事项:
-
- 0、1为Rx、Tx 针脚,这两个针脚一般作为串口使用,非串口设备尽量不占用该针脚。
- 2、3为中断口,分别对应中断0、中断1,需要中断功能的设备,必须接入此。
- 2~13、A0~A5,共18个针脚,都可以作为数字针脚,编号连起来,分别是2~19。
- 13针脚只能为OUTPUT模式,只能作为输出端,不能用作输入端。
- A6、A7针脚只能用做模拟信号,不能用作数字信号(第一版画原理图的时候,使用了模拟信号引脚来控制红外,发现控制不了)。
- 总结:一般情况下,除了0、1、13、A6、A7这几个针脚比较特殊外,其他的针脚都可以按照正常功能使用。2~12、A0~A5这17个脚,可以放心使用。