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.

, 👍0

Обсуждение

Пожалуйста, загляните в "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


1 ответ


Лучший ответ:

0

У вас конфликт прерываний. И внутренняя команда 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