Arduino编译sketch报__vector_15多重定义错误如何解决
报错根因
这是典型的Arduino硬件定时器中断冲突:Pixy2库自带的ZumoBuzzer蜂鸣器组件、你草图中引用的FlexiTimer2库,同时占用了Arduino Mega 2560的同一个中断入口__vector_15,链接阶段检测到同一个中断向量被重复定义,直接终止编译。
你做Pixy2+Dobot的视觉抓取场景完全用不到ZumoBuzzer的蜂鸣器功能,这个组件是Pixy2库为了兼容Zumo小车预留的,删掉或者禁用不会影响视觉识别、坐标输出的核心功能。
最快修复方案(1分钟搞定,不用改代码逻辑)
- 打开你的Arduino第三方库存储目录,找到Pixy2文件夹,进入后直接删除
ZumoBuzzer.cpp、ZumoBuzzer.h两个文件 - 回到Arduino IDE点编译,90%以上的情况这个报错会直接消失,不影响任何你需要的功能
备选修复方案(如果删文件后仍有冲突)
如果删完蜂鸣器文件还是报同类中断冲突,按下面步骤改配置:
- 打开Pixy2库根目录下的
Pixy2.h文件,搜索#define PIXY_USE_BUZZER这行定义,在这行最前面加//把它注释掉,强制编译阶段跳过蜂鸣器相关代码 - 如果还是冲突,就打开你草图目录里的
FlexiTimer2.cpp,找到定时器选择的宏定义,把当前绑定的Timer4改成Mega上闲置的Timer3或者Timer5,保存后重新编译即可
注意:不要随意下载第三方修改版的Pixy2库,官方原版库只要禁用无关的蜂鸣器组件,就能和FlexiTimer2完美共存,编译通过后即可正常读取Pixy2识别到的工件坐标,控制Dobot完成抓取动作。
内容的提问来源于stack exchange,提问作者Robotics Enthusiast
相关产品推荐
相关产品推荐

