c - Arduino超声波距离传感器与无源蜂鸣器实现不同的音调

标签 c arduino arduino-uno arduino-ultra-sonic

我有一个带无源蜂鸣器的超声波距离传感器。无源蜂鸣器设置了不同的音调。蜂鸣器将持续播放,直到超声波距离传感器检测到任何障碍物。但是,Arduino 无法编译代码。它显示错误:


exit status 1
Error compiling for board Arduino/Genuino Uno.

这是完整的错误信息:

Arduino: 1.8.9 (Windows 10), Board: "Arduino/Genuino Uno"

Tone.cpp.o (symbol from plugin): In function `timer0_pin_port':

(.text+0x0): multiple definition of `__vector_7'

libraries\NewPing\NewPing.cpp.o (symbol from plugin):(.text+0x0): first defined here

collect2.exe: error: ld returned 1 exit status

exit status 1
Error compiling for board Arduino/Genuino Uno.

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

我可以在 Tone.cpp.o 中找到函数 timer0_pin_port。但是我在 NewPing.cpp.o 中找不到相同的函数。

由于篇幅限制,我不能在这里发布NewPing.cpp.o。您可以在此处下载 NewPing.cpp.o:https://bitbucket.org/teckel12/arduino-new-ping/wiki/Home Tone.cpp.o 是库中的原始文件。

#include <NewPing.h>

#define TRIGGER_PIN  12  // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN     11  // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 10 // Maximum distance we want to ping for (in centimeters). 
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.

void setup() {
  Serial.begin(9600); // Open serial monitor at 115200 baud to see ping results.
  pinMode(2,OUTPUT);
}

void loop() {
  delay(50);                     // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
  Serial.print("Ping: ");
  Serial.print(sonar.ping_cm()); // Send ping, get distance in cm and print result (0 = outside set distance range)
  Serial.println("cm");
  if (sonar.ping_cm() == 0)
  tone(2,4000);
  else 
  tone(2,0);
}

预期:当距离传感器检测到任何物体时,蜂鸣器将停止播放。你必须使用音调方法来支持不同的音调。或者任何可以支持不同音调的类似功能。

最佳答案

据我了解,ToneNewPing 库对同一中断 __vector_7 的使用存在冲突。 NewPing 已知存在冲突问题,我建议您使用 Arduino 中的原始 ping。这里有一个综合example

如果您确定您没有使用 ping_timer() 方法,那么在 NewPing.h 文件中将 TIMER_ENABLED 设置为 false

这是一个讨论 Multiple Definition of "__vector_7" Error 的链接进一步。

这是关于 arduino forum 上类似问题的线程.

关于c - Arduino超声波距离传感器与无源蜂鸣器实现不同的音调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55584932/

相关文章:

c - C 中这个表达式 (char *) 是什么意思?

c - 错误 : Invalid Use of Void Expression in C

arduino - Arduino uno 中用于数字读取和计数脉冲的 CPU 周期

将人类可读时间转换为纪元时间

使用 pthreads() 创建和管理线程

c++ - 多个文件中的多个类 - C++/Arduino

arduino - 如何将 i2c 连接到 arduino uno 上的 20x4 LCD 显示器上的背光调暗

c++ - 编译Arduino代码(NodeMCU)时出错

c - 单片机/Arduino复位

c++ - 如何在 Arduino 延迟期间在 void loop() 中使用 serial.available()?