Arduino超声波距离传感器与无源蜂鸣器实现不同的音调
Arduino Ultrasonic Distance Sensor with Passive Buzzer to achieve different tones
我有一个带无源蜂鸣器的超声波距离传感器。无源蜂鸣器设置了不同的音调。蜂鸣器将持续播放,直到超声波距离传感器检测到任何障碍物。但是,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.
中找不到相同的函数
由于space的限制,我不能post这里的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);
}
预期:当距离传感器检测到任何物体时,蜂鸣器将停止播放。你必须使用音调方法来支持不同的音调。或者任何可以支持不同音调的类似功能。
据我了解,Tone
和 NewPing
库对同一中断 __vector_7
的使用存在冲突。 NewPing 已知存在冲突问题,我建议您使用 Arduino 中的原始 ping。这是一个全面的example。
如果您确定您没有使用 ping_timer()
方法,那么在 NewPing.h 文件中将 TIMER_ENABLED
设为 false
。
这里有一篇 link 进一步讨论了 Multiple Definition of "__vector_7" Error。
这是 arduino forum.
上类似问题的讨论帖
我有一个带无源蜂鸣器的超声波距离传感器。无源蜂鸣器设置了不同的音调。蜂鸣器将持续播放,直到超声波距离传感器检测到任何障碍物。但是,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.
由于space的限制,我不能post这里的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);
}
预期:当距离传感器检测到任何物体时,蜂鸣器将停止播放。你必须使用音调方法来支持不同的音调。或者任何可以支持不同音调的类似功能。
据我了解,Tone
和 NewPing
库对同一中断 __vector_7
的使用存在冲突。 NewPing 已知存在冲突问题,我建议您使用 Arduino 中的原始 ping。这是一个全面的example。
如果您确定您没有使用 ping_timer()
方法,那么在 NewPing.h 文件中将 TIMER_ENABLED
设为 false
。
这里有一篇 link 进一步讨论了 Multiple Definition of "__vector_7" Error。
这是 arduino forum.
上类似问题的讨论帖