Ультразвуковой датчик расстояния Arduino с пассивным зуммером для достижения разных тонов - PullRequest
1 голос
/ 09 апреля 2019

У меня есть ультразвуковой датчик расстояния с пассивным зуммером.Пассивный зуммер был настроен на разные тона.Зуммер будет воспроизводиться до тех пор, пока ультразвуковой датчик расстояния не обнаружит какие-либо препятствия.Однако 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.

Я мог бы найти функцию timer0_pin_port в Tone.cpp.o.Но я не смог найти ту же функцию в 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);
}

Ожидается: зуммер перестанет играть, когда датчик DIstanceобнаруживает любые предметы.Вы должны использовать тоновый метод для поддержки разных тонов.Или любые аналогичные функции, которые могут поддерживать разные тона.

1 Ответ

2 голосов
/ 09 апреля 2019

Из того, что я понимаю, библиотеки Tone и NewPing конфликтуют в использовании одного и того же прерывания __vector_7.Известно, что у NewPing есть конфликтующие проблемы, я бы посоветовал вам использовать оригинальный пинг в Arduino.Вот полный пример для него.

Если вы уверены, что вы не используете метод ping_timer(), то в файле NewPing.h введите TIMER_ENABLED to false,

Вот ссылка, в которой говорится о Множественном определении ошибки "__vector_7" далее.

Вот ветка с похожей проблемой на форуме arduino .

...