Uno - ошибка при загрузке с библиотекой
Я пишу код в VS Code на IO Platform. Вчера я закончил свой код и загрузил его в Arduino Uno. Это работает нормально. На следующий день я запустил VS Code и немного изменил код, затем загрузил его и получил ошибку.
Ошибка:
Tone.cpp.o (symbol from plugin): In function `timer0_pin_port':
(.text+0x0): multiple definition of `__vector_7'
NewPing.cpp.o (symbol from plugin):(.text+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
*** [.pio\build\uno\firmware.elf] Error 1
Я использую библиотеку NewPing.h
. Код должен делать следующее: Если расстояние превышает 20 см, раздастся звуковой сигнал и загорится красный светодиод. Если расстояние меньше 20 см, загорается синий светодиод
Код:
#include <Arduino.h> //It has to be there, because the arduino ide in VS Code will not work.
#include <NewPing.h>
#define echo_pin 3
#define trig_pin 4
#define max_range 450
#define red_led_pin 7
#define blue_led_pin 9
#define buzz_pin 10
int distance = 0;
NewPing sonar(trig_pin, echo_pin, max_range);
void setup(){
Serial.begin(9600);
pinMode(red_led_pin, OUTPUT);
pinMode(blue_led_pin, OUTPUT);
pinMode(buzz_pin, OUTPUT);
}
void loop() {
distance = sonar.ping_cm();
delay(50);
if (distance > 0) {
distance = 0;
for (int i=0; i<5; i++) {
distance += sonar.ping_cm();
delay(50);
}
distance /= 4;
Serial.print("Distance: ");
Serial.print(distance);
Serial.println("cm");
if (distance > 20) {
digitalWrite(blue_led_pin, LOW);
digitalWrite(red_led_pin, HIGH);
tone(buzz_pin, 1500);
tone(buzz_pin, 800);
}
else {
digitalWrite(red_led_pin, LOW);
digitalWrite(blue_led_pin, HIGH);
}
}
}
Я не понимаю, что изменилось. Я попытался снова импортировать библиотеку https://www.arduino.cc/en/guide/libraries, импортировав файл *.zip, также устанавливаемый в среде IDE.
@Author Climent, 👍0
Обсуждение1 ответ
Лучший ответ:
У вас конфликт прерываний. И внутренняя команда tone()
, и NewPing.h
по умолчанию используют Таймер 2, что делает их взаимоисключающими.
Однако вы можете изменить NewPing
, чтобы он не использовал таймер, отредактировав файл src/NewPing.h
и установив для TIMER_ENABLED
значение ложь
:
#define TIMER_ENABLED true // Установите значение «false», чтобы отключить ISR таймера (если возникают ошибки компиляции «__vector_7», установите значение false). По умолчанию = истина
Я написал это в своем коде под строкой с включенной библиотекой, но ничего не изменилось. Что именно и где я должен ввести? Наконец, я установил библиотеку, следуя инструкциям в этом видео: https://www.youtube.com/watch?v=_pSVzV4PdiA., @Author Climent
@AuthorCliment Majenko попросил вас изменить соответствующую строку в файле NewPing.h, а не в вашем скетче. Откройте файл NewPing.h
(который вы можете найти где-то в папке ваших библиотек) с помощью текстового редактора, найдите эту строку и измените ее в соответствии с ответом Майенко., @chrisl
@chrisl Я натыкаюсь на эту строчку. Я изменил его на ложь. И я все еще получаю ту же ошибку., @Author Climent
- Как сгенерировать файлы .a и .so для добавления в проект arduino
- Программирование Arduino Uno R3 для срабатывания реле каждые 24 часа
- Помогите исправить эту ошибку: expected unqualified-id before 'if'|Arduino
- Какие беспроводные протоколы можно использовать с Arduino?
- Вызов метода в основном скетче из библиотеки.
- Ошибка загрузки Arduino IDE
- Arduino PID для маятника пропеллера для горизонтальной балансировки
- avrdude ser_open() can't set com-state
Пожалуйста, загляните в "NewPing.h". Строка
#define ENABLE_TIMER_BASED_PING 1
закомментирована или активна?, @chrislВы изменили номера контактов с ранее? Если да, то какие именно?, @chrisl
@chrisl Как я могу заглянуть? Как открыть этот файл?, @Author Climent
Я не уверен, почему вы спрашиваете об этом. Это простой текстовый файл. Вы можете открыть его любым текстовым редактором. Все исходные файлы представляют собой текстовые файлы, которые можно легко редактировать в любом текстовом редакторе., @chrisl
Я смог скомпилировать ваш код без ошибок (используя Arduino IDE). Я использовал [эту библиотеку NewPing](https://github.com/livetronic/Arduino-NewPing) с github. Пожалуйста, сообщите нам, какую именно библиотеку NewPing вы использовали., @chrisl
@chrisl Я использую эту библиотеку https://github.com/as000fm/NewPing-1.9.1/blob/master/NewPing.h Версия 1.9.1. Я попытался загрузить его с помощью Arudino IDE на свой Arduino, и он работает. Но код VS по-прежнему не работает, и я получаю ту же ошибку., @Author Climent
Я не эксперт VSCode, но похоже, что VSCode использует неправильные файлы библиотеки для компиляции. Не могу сказать, как это исправить, @chrisl
@Крисл конечно. Но СПАСИБО за решение моей проблемы с Arduino! И если я могу спросить, какой редактор кода вы используете для arduino или для любого другого языка? Мне не очень нравится, как выглядит IDE, поэтому и спрашиваю., @Author Climent