Hi, I tried another forum but no one...

Ok, so I found this code and learned what it does, but unfortunately, I still can’t figure out how to change code so I only have to rely on one ping sensor. I really need help, and I’ve tried everything. I even learned Python so I could simplify and understand my code better. (I say my, it’s not mine, I borrowed the majority of it. ) I’d prefer if some of you guys could keep it pretty humane with your comments.Here is the code. Not my comments. Please be nice, I’m a noob.
Quote
//Sketch written by ImM//rRoboto to convert an RC truck into a robot using 3 PING sensors,
//an Arduino UNO and a //SEEED Studio Motor Shield. It is built upon PING example code by
//Tom Igoe and a motor //shield tutorial sketch by SEEED Studio.

int pinI1=8;//define I1 interface
int pinI2=11;//define I2 interface
int speedpinA=9;//enable motor A
int pinI3=12;//define I3 interface
int pinI4=13;//define I4 interface
int steerpinB=10;//enable motor B
int speed_drive =420;//define the speed of drive motor
int speed_steer =1524;//define the speed of steering motor
const int pingPin_R = 7;//sets the pin for the PING sensor on the right side of the car
const int pingPin_C = 6;//sets the pin for the PING sensor in the center side of the car
const int pingPin_L = 5;//sets the pin for the PING sensor on the left side of the car
long duration_C, inches_C,duration_R, inches_R,duration_L, inches_L;

void setup()
{
pinMode(pinI1,OUTPUT);
pinMode(pinI2,OUTPUT);
pinMode(speedpinA,OUTPUT);
pinMode(pinI3,OUTPUT);
pinMode(pinI4,OUTPUT);
pinMode(steerpinB,OUTPUT);
}

void loop()
{
int i;
int j = 1;
delay(5000);
for(i=0; i<1; i*1){
j++;
getping_all();

//all clear, no obstacles within 30" in any direction
if(inches_C >= 30 && inches_R >= 30 && inches_L >= 30)
{
forward();
}

//obstacle(s) within 0-6" range
else if (inches_L < 6 || inches_C < 6 || inches_R < 6)
{
stop();
backward();
delay(1500);
stop();
if(j%3 == 0){ //This if/else statement is designed to build a little “randomness”
back_right(); //into the robot’s movements, so it is less likely to become stuck
back_right(); //in a loop, performing the same actions over and over which only.
left();
j=1;
}
else{
back_left();
back_left();
right();
}
}

//obstacle(s) within 6"-12" range

//obstacle on left and center and right
else if (inches_R < 12 && inches_C < 12 && inches_L < 12)
{
stop();
backward();
delay(1500);
back_left();
stop();
right();
forward();
}

Character limit :slight_smile:

Next half
//obstacle on center OR left and right
else if (inches_L >= 12 && inches_R >= 12 && inches_C < 12 ||
inches_C >= 12 && inches_R < 12 && inches_L < 12)
{
stop();
backward();
delay(1500);
back_left();
stop();
right();
forward();
}
//obstacle on left and center
else if (inches_R >= 12 && inches_C < 12 && inches_L < 12)
{
stop();
backward();
delay(1500);
back_left();
}
//obstacle on right and center
else if (inches_L >= 12 && inches_C < 12 && inches_R < 12)
{
stop();
backward();
delay(1500);
back_right();
}
//obstacle on right
else if (inches_L >= 12 && inches_C >= 12 && inches_R < 12)
{
left();
left();

}
//obstacle on left
else if (inches_R >= 12 && inches_C >= 12 && inches_L < 12)
{
right();
right();
}

//obstacle(s) within 12"-30" range

//obstacle on left and center
else if (inches_R >= 30 && inches_C < 30 && inches_L < 30)
{
right();
right();
}
//obstacle on right and center
else if (inches_L >= 30 && inches_C < 30 && inches_R < 30)
{
left();
left();
}
//obstacle on right and left
else if (inches_C >= 30 && inches_L < 30 && inches_R < 30)
{
forward();
}
//obstacle on right
else if (inches_L >= 30 && inches_C >= 30 && inches_R < 30)
{
left();
}
//obstacle on left
else if (inches_R >= 30 && inches_C >= 30 && inches_L < 30)
{
right();
}
//obstacle on center
else if (inches_L >= 30 && inches_R >= 30 && inches_C < 30)
{
if(j % 2 == 0){
left();
j=1;
}
else{
right();
}
}
}
}

void forward()
{// turns on drive motor in forward and leaves it on
analogWrite(speedpinA,speed_drive);//inputs speed_drive value to set the speed
digitalWrite(pinI2,LOW);//turn DC Motor A move anticlockwise
digitalWrite(pinI1,HIGH);
}
void backward()//
{// turns on drive motor in reverse and leaves it on
analogWrite(speedpinA,speed_drive);//inputs speed_drive value to set the speed
digitalWrite(pinI2,HIGH);//turn DC Motor A move clockwise
digitalWrite(pinI1,LOW);
}
void right()//
{
analogWrite(steerpinB,speed_steer);
digitalWrite(pinI4,HIGH);//turn DC Motor B move clockwise
digitalWrite(pinI3,LOW);
forward();
delay(300);
analogWrite(steerpinB,LOW);
}
void back_left()//
{
analogWrite(steerpinB,speed_steer);
digitalWrite(pinI4,HIGH);//turn DC Motor B move clockwise
digitalWrite(pinI3,LOW);
delay(250);
backward();
delay(500);
stop();
delay(250);
}
void left()//
{
analogWrite(steerpinB,speed_steer);
digitalWrite(pinI4,LOW);//turn DC Motor B move anticlockwise
digitalWrite(pinI3,HIGH);
forward();
delay(300);
analogWrite(steerpinB,LOW);
}
void back_right()//
{
analogWrite(steerpinB,speed_steer);
digitalWrite(pinI4,LOW);//turn DC Motor B move anticlockwise
digitalWrite(pinI3,HIGH);
delay(250);
backward();
delay(500);
stop();
delay(250);
}
void stop()//stop both motors
{
digitalWrite(speedpinA,LOW);// Unenble the pin, to stop the motor.
digitalWrite(steerpinB,LOW);// Unenble the pin, to stop the motor.
}
void getping_C()//get distance from center PING
{
pinMode(pingPin_C, OUTPUT);
digitalWrite(pingPin_C, LOW);
delayMicroseconds(2);
digitalWrite(pingPin_C, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin_C, LOW);
pinMode(pingPin_C, INPUT);
duration_C = pulseIn(pingPin_C, HIGH);
inches_C = microsecondsToInches(duration_C);
}
void getping_R()//get distance from right PING
{
pinMode(pingPin_R, OUTPUT);
digitalWrite(pingPin_R, LOW);
delayMicroseconds(2);
digitalWrite(pingPin_R, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin_R, LOW);
pinMode(pingPin_R, INPUT);
duration_R = pulseIn(pingPin_R, HIGH);
inches_R = microsecondsToInches(duration_R);
}
void getping_L()//get distance from left PING
{
pinMode(pingPin_L, OUTPUT);
digitalWrite(pingPin_L, LOW);
delayMicroseconds(2);
digitalWrite(pingPin_L, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin_L, LOW);
pinMode(pingPin_L, INPUT);
duration_L = pulseIn(pingPin_L, HIGH);
inches_L = microsecondsToInches(duration_L);
}
void getping_all()
{
getping_C();
delay(2);
getping_R();
delay(2);
getping_L();
delay(2);
}
long microsecondsToInches(long microseconds){
return microseconds / 74 / 2;}

/* The above converts the time of the return to inches as explained here: http://learn.parallax.com/kickstart/28015
*/

[/quote]

Please edit your posts and surround the code with code tags ("<> button).

Learn how to put your code in its own window as seen in other posts. This can be done by placing     [code] and [/code]  around the code. This makes it easier for others to read.

I’d prefer if some of you guys could keep it pretty humane with your comments.

We’ll tell you what we think you need to hear.
If you came here, be prepared for the truth. We’re a help forum. Ask us question and we’ll try to answer it.

You need to start by following instructions. You were asked to put your code in CODE TAGS. You were told
how to do that and still haven’t done it. Do that now.

and I’ve tried everything. I even learned Python so I could simplify and understand my code better.

What in the world does THIS have to do with the price of eggs in China ? Do we care if you learned Python ?

goacego: Ok, so I found this code and learned what it does, but unfortunately, I still can't figure out how to change code so I only have to rely on one ping sensor.

How did you imagine that working? The sketch you borrowed makes decisions about which direction to turn based on the distance to objects in front and to both sides.

If you want to rely on 1 ping sensor vs 3, perhaps mount the sensor on a servo and have the servo pan left, center, right, center, left, etc.