Compilation error: redefinition of 'NewPing sonar' for Obstacle Avoiding Arduino 4WD

Im doing an obstacle avoiding bot with 4 motors, one servo, and one ultrasonic sensor. I got this code from here: ( Arduino-Obstacle-Avoiding-Robot-Car-4WD/Obstacle-Avoiding-Robot-4WD.ino at master · maker101io/Arduino-Obstacle-Avoiding-Robot-Car-4WD · GitHub )
Any and every help will be appreciated, thank you for your time!

// Before uploading the code you have to install the necessary library//
//AFMotor Library https://learn.adafruit.com/adafruit-motor-shield/library-install //
//New-Ping Library https://github.com/eliteio/Arduino_New_Ping.git // 
//Servo Library https://github.com/arduino-libraries/Servo.git //

#include <AFMotor.h>  
#include <NewPing.h>
#include <Servo.h> 

#define TRIG_PIN A0 
#define ECHO_PIN A1
#define MAX_DISTANCE 100 
#define MAX_SPEED 150 // sets speed of DC  motors
#define MAX_SPEED_OFFSET 20


NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE); 

AF_DCMotor motor1(1, MOTOR12_64KHZ); 
AF_DCMotor motor2(2, MOTOR12_64KHZ);
AF_DCMotor motor3(3, MOTOR34_64KHZ);
AF_DCMotor motor4(4, MOTOR34_64KHZ);
Servo myservo;   

boolean goesForward=false;
int distance = 100;
int speedSet = 0;

void setup() {

  myservo.attach(10);  
  myservo.write(115); 
  delay(2000);
  distance = readPing();
  delay(100);
  distance = readPing();
  delay(100);
  distance = readPing();
  delay(100);
  distance = readPing();
  delay(100);
}

void loop() {
 int distanceR = 0;
 int distanceL = 0;
 delay(40);
 
 if(distance<=25)
 {
  moveStop();
  delay(100);
  moveBackward();
  delay(200);
  moveStop();
  delay(200);
  distanceR = lookRight();
  delay(200);
  distanceL = lookLeft();
  delay(200);

  if(distanceR>=distanceL)
  {
    turnRight();
    moveStop();
  } 
  
  else
  
  {
    turnLeft();
    moveStop();
  }
 } 
 
 else
 {
  moveForward();
 }
 distance = readPing();
}

int lookRight()
{
    myservo.write(50); 
    delay(500);
    int distance = readPing();
    delay(100);
    myservo.write(115); 
    return distance;
}

int lookLeft()
{
    myservo.write(170); 
    delay(500);
    int distance = readPing();
    delay(100);
    myservo.write(115); 
    return distance;
    delay(100);
}

int readPing() { 
  delay(100);
  int cm = sonar.ping_cm();
  if(cm==0)
  {
    cm = 250;
  }
  return cm;
}

void moveStop() {
  motor1.run(RELEASE); 
  motor2.run(RELEASE);
  motor3.run(RELEASE);
  motor4.run(RELEASE);
  } 
  
void moveForward() {

 if(!goesForward)
  {
    goesForward=true;
    motor1.run(FORWARD);      
    motor2.run(FORWARD);
    motor3.run(FORWARD); 
    motor4.run(FORWARD);     
   for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2) // slowly bring the speed up to avoid loading down the batteries too quickly
   {
    motor1.setSpeed(speedSet);
    motor2.setSpeed(speedSet);
    motor3.setSpeed(speedSet);
    motor4.setSpeed(speedSet);
    delay(5);
   }
  }
}

void moveBackward() {
    goesForward=false;
    motor1.run(BACKWARD);      
    motor2.run(BACKWARD);
    motor3.run(BACKWARD);
    motor4.run(BACKWARD);  
  for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2) // slowly bring the speed up to avoid loading down the batteries too quickly
  {
    motor1.setSpeed(speedSet);
    motor2.setSpeed(speedSet);
    motor3.setSpeed(speedSet);
    motor4.setSpeed(speedSet);
    delay(5);
  }
}  

void turnRight() {
  motor1.run(FORWARD);
  motor2.run(FORWARD);
  motor3.run(BACKWARD);
  motor4.run(BACKWARD);     
  delay(500);
  motor1.run(FORWARD);      
  motor2.run(FORWARD);
  motor3.run(FORWARD);
  motor4.run(FORWARD);      
} 
 
void turnLeft() {
  motor1.run(BACKWARD);     
  motor2.run(BACKWARD);  
  motor3.run(FORWARD);
  motor4.run(FORWARD);   
  delay(500);
  motor1.run(FORWARD);     
  motor2.run(FORWARD);
  motor3.run(FORWARD);
  motor4.run(FORWARD);
}

#include <AFMotor.h>      //add Adafruit Motor Shield library
#include <Servo.h>        //add Servo Motor library            
#include <NewPing.h>      //add Ultrasonic sensor library

#define TRIG_PIN A0 // Pin A0 on the Motor Drive Shield soldered to the ultrasonic sensor
#define ECHO_PIN A1 // Pin A1 on the Motor Drive Shield soldered to the ultrasonic sensor
#define MAX_DISTANCE 300 // sets maximum useable sensor measuring distance to 300cm
#define MAX_SPEED 160 // sets speed of DC traction motors to 150/250 or about 70% of full speed - to get power drain down.
#define MAX_SPEED_OFFSET 40 // this sets offset to allow for differences between the two DC traction motors
#define COLL_DIST 30 // sets distance at which robot stops and reverses to 30cm
#define TURN_DIST COLL_DIST+20 // sets distance at which robot veers away from object
NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE); // sets up sensor library to use the correct pins to measure distance.

AF_DCMotor leftMotor1(1, MOTOR12_1KHZ); // create motor #1 using M1 output on Motor Drive Shield, set to 1kHz PWM frequency
AF_DCMotor leftMotor2(2, MOTOR12_1KHZ); // create motor #2, using M2 output, set to 1kHz PWM frequency
AF_DCMotor rightMotor1(3, MOTOR34_1KHZ);// create motor #3, using M3 output, set to 1kHz PWM frequency
AF_DCMotor rightMotor2(4, MOTOR34_1KHZ);// create motor #4, using M4 output, set to 1kHz PWM frequency
Servo myservo;  // create servo object to control a servo 

int leftDistance, rightDistance; //distances on either side
int curDist = 0;
String motorSet = "";
int speedSet = 0;

//-------------------------------------------- SETUP LOOP ----------------------------------------------------------------------------
void setup() {
  myservo.attach(10);  // attaches the servo on pin 10 (SERVO_1 on the Motor Drive Shield to the servo object 
  myservo.write(90); // tells the servo to position at 90-degrees ie. facing forward.
  delay(1000); // delay for one seconds
 }
//------------------------------------------------------------------------------------------------------------------------------------

//---------------------------------------------MAIN LOOP ------------------------------------------------------------------------------
void loop() {
  myservo.write(90);  // move eyes forward
  delay(90);
  curDist = readPing();   // read distance
  if (curDist < COLL_DIST) {changePath();}  // if forward is blocked change direction
  moveForward();  // move forward
  delay(500);
 }
//-------------------------------------------------------------------------------------------------------------------------------------

void changePath() {
  moveStop();   // stop forward movement
  myservo.write(36);  // check distance to the right
    delay(500);
    rightDistance = readPing(); //set right distance
    delay(500);
    myservo.write(144);  // check distace to the left
    delay(700);
    leftDistance = readPing(); //set left distance
    delay(500);
    myservo.write(90); //return to center
    delay(100);
    compareDistance();
  }

  
void compareDistance()   // find the longest distance
{
  if (leftDistance>rightDistance) //if left is less obstructed 
  {
    turnLeft();
  }
  else if (rightDistance>leftDistance) //if right is less obstructed
  {
    turnRight();
  }
   else //if they are equally obstructed
  {
    turnAround();
  }
}


//-------------------------------------------------------------------------------------------------------------------------------------

int readPing() { // read the ultrasonic sensor distance
  delay(70);   
  unsigned int uS = sonar.ping();
  int cm = uS/US_ROUNDTRIP_CM;
  return cm;
}
//-------------------------------------------------------------------------------------------------------------------------------------
void moveStop() {leftMotor1.run(RELEASE); leftMotor2.run(RELEASE); rightMotor1.run(RELEASE); rightMotor2.run(RELEASE);}  // stop the motors.
//-------------------------------------------------------------------------------------------------------------------------------------
void moveForward() {
    motorSet = "FORWARD";
    leftMotor1.run(FORWARD);      // turn it on going forward
    leftMotor2.run(FORWARD);      // turn it on going forward
    rightMotor1.run(FORWARD);     // turn it on going forward
    rightMotor2.run(FORWARD);     // turn it on going forward
  for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2) // slowly bring the speed up to avoid loading down the batteries too quickly
  {
    leftMotor1.setSpeed(speedSet);
    leftMotor2.setSpeed(speedSet);
    rightMotor1.setSpeed(speedSet); 
    rightMotor2.setSpeed(speedSet);
    delay(5);
  }
}
//-------------------------------------------------------------------------------------------------------------------------------------
void moveBackward() {
    motorSet = "BACKWARD";
    leftMotor1.run(BACKWARD);     // turn it on going backward
    leftMotor2.run(BACKWARD);     // turn it on going backward
    rightMotor1.run(BACKWARD);    // turn it on going backward
    rightMotor2.run(BACKWARD);    // turn it on going backward
  for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2) // slowly bring the speed up to avoid loading down the batteries too quickly
  {
    leftMotor1.setSpeed(speedSet);
    leftMotor2.setSpeed(speedSet);
    rightMotor1.setSpeed(speedSet); 
    rightMotor2.setSpeed(speedSet); 
    delay(5);
  }
}  
//-------------------------------------------------------------------------------------------------------------------------------------
void turnRight() {
  motorSet = "RIGHT";
  leftMotor1.run(FORWARD);      // turn motor 1 forward
  leftMotor2.run(FORWARD);      // turn motor 2 forward
  rightMotor1.run(BACKWARD);    // turn motor 3 backward
  rightMotor2.run(BACKWARD);    // turn motor 4 backward
  rightMotor1.setSpeed(speedSet+MAX_SPEED_OFFSET);      
  rightMotor2.setSpeed(speedSet+MAX_SPEED_OFFSET);     
  delay(1500); // run motors this way for 1500        
  motorSet = "FORWARD";
  leftMotor1.run(FORWARD);      // set both motors back to forward
  leftMotor2.run(FORWARD);
  rightMotor1.run(FORWARD);
  rightMotor2.run(FORWARD);      
}  
//-------------------------------------------------------------------------------------------------------------------------------------
void turnLeft() {
  motorSet = "LEFT";
  leftMotor1.run(BACKWARD);      // turn motor 1 backward
  leftMotor2.run(BACKWARD);      // turn motor 2 backward
  leftMotor1.setSpeed(speedSet+MAX_SPEED_OFFSET);     
  leftMotor2.setSpeed(speedSet+MAX_SPEED_OFFSET);    
  rightMotor1.run(FORWARD);     // turn motor 3 forward
  rightMotor2.run(FORWARD);     // turn motor 4 forward
  delay(1500); // run motors this way for 1500  
  motorSet = "FORWARD";
  leftMotor1.run(FORWARD);      // turn it on going forward
  leftMotor2.run(FORWARD);      // turn it on going forward
  rightMotor1.run(FORWARD);     // turn it on going forward
  rightMotor2.run(FORWARD);     // turn it on going forward
}  
//-------------------------------------------------------------------------------------------------------------------------------------
void turnAround() {
  motorSet = "RIGHT";
  leftMotor1.run(FORWARD);      // turn motor 1 forward
  leftMotor2.run(FORWARD);      // turn motor 2 forward
  rightMotor1.run(BACKWARD);    // turn motor 3 backward
  rightMotor2.run(BACKWARD);    // turn motor 4 backward
  rightMotor1.setSpeed(speedSet+MAX_SPEED_OFFSET);      
  rightMotor2.setSpeed(speedSet+MAX_SPEED_OFFSET);
  delay(1700); // run motors this way for 1700
  motorSet = "FORWARD";
  leftMotor1.run(FORWARD);      // set both motors back to forward
  leftMotor2.run(FORWARD);
  rightMotor1.run(FORWARD);
  rightMotor2.run(FORWARD);      
}  

Take a look at your sketch starting with line 181. Looks like a copy and paste of the complete sketch error to me.

So what do I do? do I delete this:

#include <AFMotor.h>      //add Adafruit Motor Shield library
#include <Servo.h>        //add Servo Motor library            
#include <NewPing.h>      //add Ultrasonic sensor library

Because I did and it still giving me the same error:
(
C:\Users\justa\OneDrive - University of Puerto Rico\MECHAPRO_1\MECHAPRO_1.ino:184:0: warning: "MAX_DISTANCE" redefined
#define MAX_DISTANCE 300 // sets maximum useable sensor measuring distance to 300cm

C:\Users\justa\OneDrive - University of Puerto Rico\MECHAPRO_1\MECHAPRO_1.ino:13:0: note: this is the location of the previous definition
#define MAX_DISTANCE 100

C:\Users\justa\OneDrive - University of Puerto Rico\MECHAPRO_1\MECHAPRO_1.ino:185:0: warning: "MAX_SPEED" redefined
#define MAX_SPEED 160 // sets speed of DC traction motors to 150/250 or about 70% of full speed - to get power drain down.

C:\Users\justa\OneDrive - University of Puerto Rico\MECHAPRO_1\MECHAPRO_1.ino:14:0: note: this is the location of the previous definition
#define MAX_SPEED 150 // sets speed of DC motors

C:\Users\justa\OneDrive - University of Puerto Rico\MECHAPRO_1\MECHAPRO_1.ino:186:0: warning: "MAX_SPEED_OFFSET" redefined
#define MAX_SPEED_OFFSET 40 // this sets offset to allow for differences between the two DC traction motors

C:\Users\justa\OneDrive - University of Puerto Rico\MECHAPRO_1\MECHAPRO_1.ino:15:0: note: this is the location of the previous definition
#define MAX_SPEED_OFFSET 20

C:\Users\justa\OneDrive - University of Puerto Rico\MECHAPRO_1\MECHAPRO_1.ino:182:18: error: redefinition of 'NewPing sonar'
#define TRIG_PIN A0 // Pin A0 on the Motor Drive Shield soldered to the ultrasonic sensor
^
C:\Users\justa\OneDrive - University of Puerto Rico\MECHAPRO_1\MECHAPRO_1.ino:189:15: note: in expansion of macro 'TRIG_PIN'
NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE); // sets up sensor library to use the correct pins to measure distance.
^~~~~~~~
C:\Users\justa\OneDrive - University of Puerto Rico\MECHAPRO_1\MECHAPRO_1.ino:18:9: note: 'NewPing sonar' previously declared here
NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE);
^~~~~
C:\Users\justa\OneDrive - University of Puerto Rico\MECHAPRO_1\MECHAPRO_1.ino:195:7: error: redefinition of 'Servo myservo'
Servo myservo; // create servo object to control a servo
^~~~~~~
C:\Users\justa\OneDrive - University of Puerto Rico\MECHAPRO_1\MECHAPRO_1.ino:24:7: note: 'Servo myservo' previously declared here
Servo myservo;
^~~~~~~
C:\Users\justa\OneDrive - University of Puerto Rico\MECHAPRO_1\MECHAPRO_1.ino:200:5: error: redefinition of 'int speedSet'
int speedSet = 0;
^~~~~~~~
C:\Users\justa\OneDrive - University of Puerto Rico\MECHAPRO_1\MECHAPRO_1.ino:28:5: note: 'int speedSet' previously defined here
int speedSet = 0;
^~~~~~~~
C:\Users\justa\OneDrive - University of Puerto Rico\MECHAPRO_1\MECHAPRO_1.ino: In function 'void setup()':
C:\Users\justa\OneDrive - University of Puerto Rico\MECHAPRO_1\MECHAPRO_1.ino:203:6: error: redefinition of 'void setup()'
void setup() {
^~~~~
C:\Users\justa\OneDrive - University of Puerto Rico\MECHAPRO_1\MECHAPRO_1.ino:30:6: note: 'void setup()' previously defined here
void setup() {
^~~~~
C:\Users\justa\OneDrive - University of Puerto Rico\MECHAPRO_1\MECHAPRO_1.ino: In function 'void loop()':
C:\Users\justa\OneDrive - University of Puerto Rico\MECHAPRO_1\MECHAPRO_1.ino:211:6: error: redefinition of 'void loop()'
void loop() {
^~~~
C:\Users\justa\OneDrive - University of Puerto Rico\MECHAPRO_1\MECHAPRO_1.ino:45:6: note: 'void loop()' previously defined here
void loop() {
^~~~
C:\Users\justa\OneDrive - University of Puerto Rico\MECHAPRO_1\MECHAPRO_1.ino: In function 'int readPing()':
C:\Users\justa\OneDrive - University of Puerto Rico\MECHAPRO_1\MECHAPRO_1.ino:256:5: error: redefinition of 'int readPing()'
int readPing() { // read the ultrasonic sensor distance
^~~~~~~~
C:\Users\justa\OneDrive - University of Puerto Rico\MECHAPRO_1\MECHAPRO_1.ino:105:5: note: 'int readPing()' previously defined here
int readPing() {
^~~~~~~~
C:\Users\justa\OneDrive - University of Puerto Rico\MECHAPRO_1\MECHAPRO_1.ino: In function 'void moveStop()':
C:\Users\justa\OneDrive - University of Puerto Rico\MECHAPRO_1\MECHAPRO_1.ino:263:6: error: redefinition of 'void moveStop()'
void moveStop() {leftMotor1.run(RELEASE); leftMotor2.run(RELEASE); rightMotor1.run(RELEASE); rightMotor2.run(RELEASE);} // stop the motors.
^~~~~~~~
C:\Users\justa\OneDrive - University of Puerto Rico\MECHAPRO_1\MECHAPRO_1.ino:115:6: note: 'void moveStop()' previously defined here
void moveStop() {
^~~~~~~~
C:\Users\justa\OneDrive - University of Puerto Rico\MECHAPRO_1\MECHAPRO_1.ino: In function 'void moveForward()':
C:\Users\justa\OneDrive - University of Puerto Rico\MECHAPRO_1\MECHAPRO_1.ino:265:6: error: redefinition of 'void moveForward()'
void moveForward() {
^~~~~~~~~~~
C:\Users\justa\OneDrive - University of Puerto Rico\MECHAPRO_1\MECHAPRO_1.ino:122:6: note: 'void moveForward()' previously defined here
void moveForward() {
^~~~~~~~~~~
C:\Users\justa\OneDrive - University of Puerto Rico\MECHAPRO_1\MECHAPRO_1.ino: In function 'void moveBackward()':
C:\Users\justa\OneDrive - University of Puerto Rico\MECHAPRO_1\MECHAPRO_1.ino:281:6: error: redefinition of 'void moveBackward()'
void moveBackward() {
^~~~~~~~~~~~
C:\Users\justa\OneDrive - University of Puerto Rico\MECHAPRO_1\MECHAPRO_1.ino:142:6: note: 'void moveBackward()' previously defined here
void moveBackward() {
^~~~~~~~~~~~
C:\Users\justa\OneDrive - University of Puerto Rico\MECHAPRO_1\MECHAPRO_1.ino: In function 'void turnRight()':
C:\Users\justa\OneDrive - University of Puerto Rico\MECHAPRO_1\MECHAPRO_1.ino:297:6: error: redefinition of 'void turnRight()'
void turnRight() {
^~~~~~~~~
C:\Users\justa\OneDrive - University of Puerto Rico\MECHAPRO_1\MECHAPRO_1.ino:158:6: note: 'void turnRight()' previously defined here
void turnRight() {
^~~~~~~~~
C:\Users\justa\OneDrive - University of Puerto Rico\MECHAPRO_1\MECHAPRO_1.ino: In function 'void turnLeft()':
C:\Users\justa\OneDrive - University of Puerto Rico\MECHAPRO_1\MECHAPRO_1.ino:313:6: error: redefinition of 'void turnLeft()'
void turnLeft() {
^~~~~~~~
C:\Users\justa\OneDrive - University of Puerto Rico\MECHAPRO_1\MECHAPRO_1.ino:170:6: note: 'void turnLeft()' previously defined here
void turnLeft() {
^~~~~~~~
Multiple libraries were found for "Servo.h"
Used: C:\Users\justa\OneDrive - University of Puerto Rico\Arduino\libraries\Servo
Not used: C:\Users\justa\AppData\Local\Arduino15\libraries\Servo
exit status 1

Compilation error: redefinition of 'NewPing sonar'
)

Please take a moment and read what I wrote, and think about it.

I did not say you had copied and pasted only your #includes. You copied and pasted the entire sketch. Twice.

1 Like

Oh god, I did. This is just embarrasing.I fixed it. It was able to be complied and uploaded. But now the bot is just going in reverse and not changing direction.

I moved your topic to an appropriate forum category @elektrerik.

In the future, please take some time to pick the forum category that best suits the subject of your topic. There is an "About the _____ category" topic at the top of each category that explains its purpose.

This is an important part of responsible forum usage, as explained in the "How to get the best out of this forum" guide. The guide contains a lot of other useful information. Please read it.

Thanks in advance for your cooperation.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.