collect2.exe: error: ld returned 1 exit status

Hi Arduino Forum

Does someone know what the error is? I tried to google it, but I can't find a clear answer. It is a code from edwards robotics from The robot "Yoggy". I really hope someone can find the error. Thanks beforehand.

Best Regards,
Michael.

#include <NewPing.h>
#include <Servo.h>
#include "pitches.h"

Servo leftServo;
Servo rightServo;
#define SPEAKER 3
#define LED 13

#define TRIGGER_PIN  6
#define ECHO_PIN     7
#define MAX_DISTANCE 100
#define PITCH 523

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

int roam = 0;
unsigned int time;
int distance;
int triggerDistance = 30;
int fDistance;
int lDistance;
int rDistance;
int playSong = 0;

int melody[] = {
  NOTE_C4, NOTE_C4, NOTE_G4, NOTE_G4, NOTE_A4, NOTE_A4, NOTE_G4, NOTE_F4, NOTE_F4, NOTE_E4,
  NOTE_E4, NOTE_D4, NOTE_D4, NOTE_C4
};
int noteDurations[] = {
  2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1
};

void setup()
{
  Serial.begin(9600);
  leftServo.attach(8);
  leftServo.write(91);
  rightServo.attach(9);
  rightServo.write(90);
  pinMode(LED, OUTPUT);
  Serial.println("Connection succesful!");
}


void loop()
{
  if (Serial.available() > 0)
  {
    int data = Serial.read();
    switch (data)
    {
      case 'w' :
        moveForward();
        buzz();
        break;
      case 's' :
        moveBackward();
        buzz();
        break;
      case 'a' :
        moveLeft();
        buzz();
        break;
      case 'd' :
        moveRight();
        buzz();
        break;
      case 'e' :
        moveStop();
        break;
      case 'r' :
        toggleRoam();
        buzz();
        break;
      case 'm' :
        if (playSong == 0) {
          song();
        }
      default  :
        break;
      case 'f' :
        fart();
        break;
    }
  }
  if (roam == 0) {
    digitalWrite(LED, LOW);
  }
  else if (roam == 1) {
    digitalWrite(LED, HIGH);
    scan();
    fDistance = distance;
    if (fDistance < triggerDistance) {
      tone(SPEAKER, NOTE_C2, 100);
      delay(50);
      tone(SPEAKER, NOTE_C1, 100);
      moveBackward();
      delay(1000);
      moveRight();
      delay(500);
      moveStop();
      scan();
      rDistance = distance;
      moveLeft();
      delay(1000);
      moveStop();
      scan();
      lDistance = distance;
      if (lDistance < rDistance) {
        moveRight();
        delay(200);
        moveForward();
      }
      else {
        moveForward();
      }
    }
    else {
      moveForward();
    }
  }
  delay(50);
}

void toggleRoam() {
  if (roam == 0) {
    roam = 1;
    Serial.println("Activated Roam Mode");
  }
  else {
    roam = 0;
    moveStop();
    Serial.println("De-activated Roam Mode");
  }
}

void scan() {
  time = sonar.ping();
  distance = time / US_ROUNDTRIP_CM;
  if (distance == 0) {
    distance = 100;
  }
  Serial.print(distance);
  Serial.println(" cm");
  delay(10);
}

void moveBackward() {
  Serial.println("Moving Backward");
  rightServo.write(180);
  leftServo.write(0);
}

void moveForward() {
  Serial.println("Moving Forward");
  rightServo.write(0);
  leftServo.write(180);
}

void moveRight() {
  Serial.println("Turning Right");
  rightServo.write(0);
  leftServo.write(0);
}

void moveLeft() {
  Serial.println("Turning Left");
  rightServo.write(180);
  leftServo.write(180);
}

void moveStop() {
  Serial.println("Stopping");
  rightServo.write(90);
  leftServo.write(95);
}

void buzz() {
  tone(SPEAKER, NOTE_C7, 100);
  delay(50);
  tone(SPEAKER, NOTE_C6, 100);
}

void song() {
  playSong = 1;
  Serial.println("Starting Song");
  for (int thisNote = 0; thisNote < 14; thisNote++) {
    int noteDuration = 1000 / noteDurations[thisNote];
    tone(SPEAKER, melody[thisNote], noteDuration);
    int pauseBetweenNotes = noteDuration * 1.30;
    Serial.print("d ");
    digitalWrite(LED, HIGH);
    delay(pauseBetweenNotes);
    digitalWrite(LED, LOW);
    noTone(SPEAKER);
  }
  playSong = 0;
  Serial.println("");
  Serial.println("Finished Song");
}

void fart() {
  tone(SPEAKER, NOTE_C2, 200);
  delay(200);
  tone(SPEAKER, NOTE_C1, 400);
  delay(400);
  noTone(SPEAKER);
}

pitches.h:

/*************************************************
 * Public Constants
 *************************************************/

#define NOTE_B0  31
#define NOTE_C1  33
#define NOTE_CS1 35
#define NOTE_D1  37
#define NOTE_DS1 39
#define NOTE_E1  41
#define NOTE_F1  44
#define NOTE_FS1 46
#define NOTE_G1  49
#define NOTE_GS1 52
#define NOTE_A1  55
#define NOTE_AS1 58
#define NOTE_B1  62
#define NOTE_C2  65
#define NOTE_CS2 69
#define NOTE_D2  73
#define NOTE_DS2 78
#define NOTE_E2  82
#define NOTE_F2  87
#define NOTE_FS2 93
#define NOTE_G2  98
#define NOTE_GS2 104
#define NOTE_A2  110
#define NOTE_AS2 117
#define NOTE_B2  123
#define NOTE_C3  131
#define NOTE_CS3 139
#define NOTE_D3  147
#define NOTE_DS3 156
#define NOTE_E3  165
#define NOTE_F3  175
#define NOTE_FS3 185
#define NOTE_G3  196
#define NOTE_GS3 208
#define NOTE_A3  220
#define NOTE_AS3 233
#define NOTE_B3  247
#define NOTE_C4  262
#define NOTE_CS4 277
#define NOTE_D4  294
#define NOTE_DS4 311
#define NOTE_E4  330
#define NOTE_F4  349
#define NOTE_FS4 370
#define NOTE_G4  392
#define NOTE_GS4 415
#define NOTE_A4  440
#define NOTE_AS4 466
#define NOTE_B4  494
#define NOTE_C5  523
#define NOTE_CS5 554
#define NOTE_D5  587
#define NOTE_DS5 622
#define NOTE_E5  659
#define NOTE_F5  698
#define NOTE_FS5 740
#define NOTE_G5  784
#define NOTE_GS5 831
#define NOTE_A5  880
#define NOTE_AS5 932
#define NOTE_B5  988
#define NOTE_C6  1047
#define NOTE_CS6 1109
#define NOTE_D6  1175
#define NOTE_DS6 1245
#define NOTE_E6  1319
#define NOTE_F6  1397
#define NOTE_FS6 1480
#define NOTE_G6  1568
#define NOTE_GS6 1661
#define NOTE_A6  1760
#define NOTE_AS6 1865
#define NOTE_B6  1976
#define NOTE_C7  2093
#define NOTE_CS7 2217
#define NOTE_D7  2349
#define NOTE_DS7 2489
#define NOTE_E7  2637
#define NOTE_F7  2794
#define NOTE_FS7 2960
#define NOTE_G7  3136
#define NOTE_GS7 3322
#define NOTE_A7  3520
#define NOTE_AS7 3729
#define NOTE_B7  3951
#define NOTE_C8  4186
#define NOTE_CS8 4435
#define NOTE_D8  4699
#define NOTE_DS8 4978

The error:

C:\Users\MARTIN~1\AppData\Local\Temp\build2977692173166744092.tmp/core.a(Tone.cpp.o): In function `__vector_7':
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Tone.cpp:538: multiple definition of `__vector_7'
NewPing\NewPing.cpp.o:C:\Users\Martin Pham\Documents\Arduino\libraries\NewPing/NewPing.cpp:284: first defined here
collect2.exe: error: ld returned 1 exit status
Error in compiling.

In "NewPing.h", (line #143), you'll find:-

#define TIMER_ENABLED true

You need to set this to "false". (It's only needed to be set "true" if you use the 'ping_timer()' method.)

So you don't forget the change, it's a good idea to make a note of it. I did it like this:-

//#define TIMER_ENABLED true      // Set to "false" to disable the timer ISR (if getting "__vector_7" compile errors set this to false). Default=true
#define TIMER_ENABLED false     // *** See note above ***

Tim, (teckel), has mentioned in the "NewPing" thread that it can be done another way, so that 'ping_timer()' can still be used, but I didn't follow up since I don't use 'ping_timer()'.
In my case, I didn't use "Tone", but 'ping_timer()' also conflicts with the "IRremote" library, which I did use.