13298| 4
|
[求助] 如何解决Tone.cpp与IRremote.cpp冲突问题 |
在震动报警器示例代码中做了一下扩展,增加一个RGB LED,使报警的时候有红绿蓝三色进行闪烁。震动停止10秒钟之后,报警停止。 上面这些功能都实现了,除了使用倾斜检查来实现震动检测准确率不是特别高,其他的基本上正常。 最后想加入红外遥控器进行控制,但是导入IRremote.h后编译器检查代码时报错,看错误信息是有冲突,于是找到发生冲突的文件,看到冲突确实存在。 发生冲突的两个文件分别是“Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Tone.cpp”和“Arduino.app/Contents/Resources/Java/libraries/IRremote/IRremote.cpp”。 完整的报错信息如下: core.a(Tone.cpp.o): In function `__vector_7': /Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Tone.cpp:535: multiple definition of `__vector_7' IRremote/IRremote.cpp.o:/Applications/Arduino.app/Contents/Resources/Java/libraries/IRremote/IRremote.cpp:311: first defined here 完整的代码如下:
这种问题大家开发过程中遇到过没,有什么好的解决方法吗? |
我有一次用红外遥控接D3的LED,也遇到过类似的事情。经求助得知,红外的库文件里计时器占用了D3和D11针脚,你试着改一下LED的接线,或许有用。 |
你好,类似于楼上说的,两个库用的是同一个定时器,造成定时器冲突,两个库里面都写了同一个定时器的中断程序,这样就出现了同一个定时器却有两个中断程序,导致编译器不能正常编译。可以修改IR的库,换个定时器使用,在IRremoteint_h里面,找到这些语句: // Arduino Duemilanove, Diecimila, LilyPad, Mini, Fio, etc #else #define IR_USE_TIMER1 // tx = pin 9 //#define IR_USE_TIMER2 // tx = pin 3 #endif 这里我已经修改了,注释掉了#define IR_USE_TIMER2 ,使用了#define IR_USE_TIMER1,因此不会出现定时器冲突了。 重启IDE后即可正常编译。 |
© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed