极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 19693|回复: 6

tone() 和 IRremote 冲突??

[复制链接]
发表于 2013-4-8 21:16:40 | 显示全部楼层 |阅读模式
core.a(Tone.cpp.o): In function `__vector_7':
xxx\arduino-1.0.3\hardware\arduino\cores\arduino/Tone.cpp:535: multiple definition of `__vector_7'
IRremote\IRremote.cpp.o:xxx\Documents\Arduino\libraries\IRremote/IRremote.cpp:311: first defined here


各位有遇到过吗??如何解决?
回复

使用道具 举报

发表于 2013-4-9 02:08:42 | 显示全部楼层
这个错误提示表面上是说在红外库里定义过的函数在Tone里又重复定义了,实际原因是红外库和Tone都使用了相同的内部计时器TIMER2(在各自的ISR函数里),换名字是不解决根本问题的。如果你不熟悉avr的中断处理函数ISR,修改哪一方都不靠谱,考虑下面的Tone的替代办法:
arduino的几个延时函数都是用的timer 0。这里有个不用timer2而用延时函数的发声函数,用它替代Tone应该可以避开与红外库的计时器冲突:
  1. void newtone(byte tonePin, int frequency, int duration) {
  2. int period = 1000000L / frequency;
  3. int pulse = period / 2;
  4. for (long i = 0; i < duration * 1000L; i += period) {
  5. digitalWrite(tonePin, HIGH);
  6. delayMicroseconds(pulse);
  7. digitalWrite(tonePin, LOW);
  8. delayMicroseconds(pulse);
  9. }
  10. }
复制代码

评分

参与人数 1 +1 收起 理由
幻生幻灭 + 1 赞一个!

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2013-4-9 10:08:31 | 显示全部楼层
的确有冲突问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-4-9 10:22:25 | 显示全部楼层
春泥蛋炒饭 发表于 2013-4-9 02:08
这个错误提示表面上是说在红外库里定义过的函数在Tone里又重复定义了,实际原因是红外库和Tone都使用了相同 ...

谢谢,不过 tone() 是 ardino 自带的,如果有冲突,看来应该在IRremote里修改了。
回复 支持 反对

使用道具 举报

发表于 2013-4-9 14:06:35 | 显示全部楼层
贱客 发表于 2013-4-9 10:22
谢谢,不过 tone() 是 ardino 自带的,如果有冲突,看来应该在IRremote里修改了。

我是说,不使用tone函数而改用这个新函数,不是说让你去修改tone函数。当然你要修改红外库也行,但改变它用的计时器和重新写一遍差不多,比较一下哪个更简单。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-4-9 15:04:34 | 显示全部楼层
春泥蛋炒饭 发表于 2013-4-9 14:06
我是说,不使用tone函数而改用这个新函数,不是说让你去修改tone函数。当然你要修改红外库也行,但改变它 ...

嗯,有修改 IRremote 的打算。。主要是命名习惯看着别扭
回复 支持 反对

使用道具 举报

发表于 2013-7-19 13:27:17 | 显示全部楼层
mark..........
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-12 10:43 , Processed in 0.046579 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表