You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Arduino引入NewPing.h报__vector_13多重定义编译错误如何解决

错误原因分析

你遇到的__vector_13重复定义错误,是Arduino开发中非常典型的定时器资源冲突问题:

  • __vector_13对应AVR单片机的定时器1比较匹配A中断向量,同一时间只能被一个功能模块注册使用
  • NewPing库默认启用定时器1实现测距计时,已经注册了该中断向量
  • Arduino内置tone()函数生成蜂鸣器方波时,默认也会占用定时器1注册同一中断向量,二者冲突触发报错
  • 额外你同时引入了功能完全重叠的SR04.h和NewPing.h两个超声波测距库,也可能加重资源冲突问题。

报错关键信息:

(.text+0x0): multiple definition of `__vector_13'
C:\Users\name\AppData\Local\Temp\arduino_build_789753\libraries\NewPing\NewPing.cpp.o (symbol from plugin):(.text+0x0): first defined here
解决步骤

按照以下顺序操作即可解决冲突:

  • 第一步:删除冗余库引用,删掉代码中#include "SR04.h"这一行,你全程使用NewPing库的接口实现测距,SR04库没有被调用,完全不需要保留
  • 第二步:修改NewPing库的定时器配置,有两种可选方案:
    1. 关闭NewPing的定时器功能:打开本地NewPing库目录下的NewPing.h文件,找到#define TIMER_ENABLED true配置项,将值改为false即可。你代码中使用的是阻塞式sonar.ping()测距接口,不需要用到NewPing的定时器中断功能,该修改不会影响你的业务逻辑。
    2. 切换NewPing使用定时器2:如果你需要使用NewPing的非阻塞测距功能,就将NewPing.h中#define TIMER1 1配置项改为#define TIMER2 1,换用未被占用的定时器2即可。
  • 第三步(可选):如果你不想修改NewPing库配置,也可以弃用内置tone()函数,自己手动写模拟方波输出的代码驱动蜂鸣器,避免占用定时器资源。

修改完成后重新编译即可正常通过,原有测距、点阵显示、蜂鸣器功能不受影响。

内容的提问来源于stack exchange,提问作者Bean

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 08:24:04