HC-SR04 SENSOR continuously out putting on number

Im doing a school project, where we make a robot that is supposed to be able to find its way around a room. We have run into a wall that we have been trying to climb for days with this sensor.

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



// Declare classes for Servo connectors of the MotorShield.
Servo servo_1;
Servo servo_2;



const int Trig = 8;
const int Echo = 10;
const int PWR = 6;
const int Close= 5; 
int distance;

AF_DCMotor MotorL(1);
AF_DCMotor MotorR(4);



void setup() {
    //start motors
     MotorL.setSpeed(200);
     MotorL.run(RELEASE);
     MotorR.setSpeed(200);
     MotorL.run(RELEASE);
  
    pinMode(Trig, OUTPUT);
    pinMode(Echo, INPUT);
    pinMode(0, OUTPUT);

    Serial.begin(9600);

}

void loop() {
  delay(1000);
  digitalWrite(PWR, HIGH);
  Think();
 
 
}



void Think(){
  int turn;
  int D = Get_Distance();
  if (D >= Close){
   turn = random(1,2);
   if (turn == 1){
     MotorL.run(RELEASE);
     MotorL.run(FORWARD);
     MotorR.run(RELEASE);
     MotorR.run(BACKWARD);
     //motor right backward
   }
  
   else if(turn == 2){
      MotorL.run(RELEASE);
      MotorL.run(BACKWARD);
      MotorR.run(RELEASE);
      MotorR.run(FORWARD);
     //motor left forward
    }
  }
  else if (D <= Close|| D == 0){
    MotorL.run(RELEASE);
      MotorL.run(FORWARD);
      MotorR.run(RELEASE);
      MotorR.run(FORWARD);
    //motor left forward
    //motor left backward
 }
}

int Get_Distance(){
  long duration;
    digitalWrite(Trig, LOW);
    delayMicroseconds(2);
    digitalWrite(Trig, HIGH);
    delayMicroseconds(10);
    digitalWrite(Trig, LOW);
    duration = pulseIn(Echo, HIGH);
    delayMicroseconds(10);
    distance = duration*0.034/2;
    Serial.begin(9600);
    Serial.print(distance);
    Serial.print("\n");

    return(distance);
}

the serial monitor is only out putting either 0 or 59, but mostly 59

   turn = random(1,2);
   if (turn == 1){

This function will return all values greater than or equal to 1 that are less than 2. How many numbers fall in that range?

You might as well have:

   turn = 1;
   if(turn == 1) // Well, duh...
   {
    Serial.begin(9600);

This belongs in setup(), where it will be done ONCE, not every time you want to output data.

Try also printing "duration" and see what values that has.

Steve

Sorry for late reply and I did the suggested, this is what has happened

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



// Declare classes for Servo connectors of the MotorShield.
Servo servo_1;
Servo servo_2;


/*
Adding AI
Adding ultrasonic sensors
*/

const int Trig = 8;
const int Echo = 10;
const int Close= 10; 
int distance;



void setup() {
    pinMode(Trig, OUTPUT);
    pinMode(Echo, INPUT);
    pinMode(0, OUTPUT);

    Serial.begin(9600);

}

void loop() {

Get_Distance();
Think();
 
 
}



void Think(){
  int turn;
  if (distance >= Close){
   turn = random(0,3);
   if (turn == 1){
     //motor left forward
     //motor right backward
   }
  } 
   else if(turn == 2){
     //realse motors
     //motor left backward
     //motor left forward
    }
  else if (distance <= Close|| distance == 0){
    
    //motor left forward
    //motor left backward
 }
}

int Get_Distance(){
  long duration;
    digitalWrite(Trig, LOW);
    delayMicroseconds(2);
    digitalWrite(Trig, HIGH);
    delayMicroseconds(10);
    digitalWrite(Trig, LOW);
    duration = pulseIn(Echo, HIGH);
    distance = duration*0.034/2;
    Serial.print("dist:");
    Serial.print(distance);
    Serial.print("\n");
    Serial.print("duration:");
    Serial.print(duration);
    Serial.print("\n");
    return(distance);
}
dist:9
duration:544
dist:8
duration:525
dist:10
duration:645
dist:3875
duration:227965
dist:145
duration:8551
dist:3856
duration:226867
dist:141
duration:8309
dist:145
duration:8586
dist:143
duration:8418
dist:131
duration:7723
dist:24
duration:1446
dist:21
duration:1237
dist:10
duration:619
dist:11
duration:660
dist:10
duration:641
dist:11
duration:662
dist:11
duration:686
dist:11
duration:680
dist:11
duration:693
dist:11
duration:684
dist:11
duration:652
dist:10
duration:599
dist:9
duration:578
dist:9
duration:583
dist:10
duration:596
dist:3833
duration:225490
dist:0
duration:0
dist:0
duration:0
dist:3857
duration:226909
dist:3847
duration:226322
dist:3889
duration:228797
dist:142
duration:8401
dist:3881
duration:228319
dist:144
duration:8512
dist:3861
duration:227145
dist:0
duration:0
#include <Servo.h>
#include<AFMotor.h>



// Declare classes for Servo connectors of the MotorShield.
Servo servo_1;
Servo servo_2;


/*
Adding AI
Adding ultrasonic sensors
*/

const int Trig = 8;
const int Echo = 10;
const int Close= 10; 
int distance;
AF_DCMotor MotorL(1);
AF_DCMotor MotorR(4);


void setup() {
    pinMode(Trig, OUTPUT);
    pinMode(Echo, INPUT);
    pinMode(0, OUTPUT);
    Serial.begin(9600);
}

void loop() {
Get_Distance();
Think();
}

int Get_Distance(){
  long duration;
    digitalWrite(Trig, LOW);
    delayMicroseconds(2);
    digitalWrite(Trig, HIGH);
    delayMicroseconds(10);
    digitalWrite(Trig, LOW);
    duration = pulseIn(Echo, HIGH);
    distance = duration*0.034/2;
    Serial.print("dist:");
    Serial.print(distance);
    Serial.print("\n");
    Serial.print("duration:");
    Serial.print(duration);
    Serial.print("\n");
    return(distance);
}

void Think(){
  int turn;
  if (distance >= Close){
   turn = random(1,2);
   if (turn == 1){
     MotorL.run(RELEASE);
     MotorL.run(FORWARD);
     MotorR.run(RELEASE);
     MotorR.run(BACKWARD);
   }
   else if(turn == 2){
      MotorL.run(RELEASE);
      MotorL.run(BACKWARD);
      MotorR.run(RELEASE);
      MotorR.run(FORWARD);
    }
  }
  else if (distance <= Close|| distance == 0){
      MotorL.run(RELEASE);
      MotorL.run(FORWARD);
      MotorR.run(RELEASE);
      MotorR.run(FORWARD);
 }
}
dist:0
duration:0
dist:0
duration:0
dist:0
duration:0
dist:0
duration:0
dist:0
duration:0
dist:0
duration:0
dist:0
duration:0
dist:0

Update...

I'm not sure why you have any code to use distance when you are having problems getting distance.

I don't see any differences between the code that was outputting somewhat reasonable data and the code that is outputting all 0's. That suggests that you have a hardware problem.

Why does the Get_Distance() function return the value in a global variable?

Why does it return anything, when you don't care what the returned value is?