Changing directions on a robot.

Hello,

Im trying to make a robot run a course of sorts, where it goes right, left, right, left, left, left, right. I'm very new to programming so I don't know what I'm doing wrong with my code. I've received a lot of help getting to where I am now, but I'm not sure what's going on. Every time i test it out, it repeats the beginning part of the loop. Not sure why it doesn't just go down the else if statements. Here is my code:

const int AIN1 = 13;
const int AIN2 = 12;
const int PWMA = 11;
const int PWMB = 10;
const int BIN2 = 9;
const int BIN1 = 8;
const int trigPin = 6;
const int echoPin = 5;

int switchPin = 7;

float distance = 0;

int backupTime = 300;
int turnTime = 200;

/*************************************************************************************************/
void setup()
{
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(switchPin, INPUT_PULLUP);
pinMode(AIN1, OUTPUT);
pinMode(AIN2, OUTPUT);
pinMode(PWMA, OUTPUT);
pinMode(BIN1, OUTPUT);
pinMode(BIN2, OUTPUT);
pinMode(PWMB, OUTPUT);

Serial.begin(9600);
Serial.print("We will win, Dr. Gururajan!");
}

/*************************************************************************************************/
void loop()
{
distance = getDistance();

Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" in");

if(digitalRead(switchPin) == LOW){

if(distance < 10){
Serial.print(" ");
Serial.print("Backin' up.");

rightMotor(0);
leftMotor(0);
delay(200);

rightMotor(-255);
leftMotor(-255);
delay(backupTime);

rightMotor(510);
leftMotor(-510);
delay(turnTime);

Serial.print(" ");
Serial.print("Moving...");
rightMotor(255);
leftMotor(255);
}
/********************/
if(distance < 10){
Serial.print(" ");
Serial.print("Backin' up.");

rightMotor(0);
leftMotor(0);
delay(200);

rightMotor(-255);
leftMotor(-255);
delay(backupTime);

rightMotor(-510);
leftMotor(510);
delay(turnTime);

Serial.print(" ");
Serial.print("Moving...");
rightMotor(255);
leftMotor(255);
}
/********************/
if(distance < 10){
Serial.print(" ");
Serial.print("Backin' up.");

rightMotor(0);
leftMotor(0);
delay(200);

rightMotor(-255);
leftMotor(-255);
delay(backupTime);

rightMotor(510);
leftMotor(-510);
delay(turnTime);

Serial.print(" ");
Serial.print("Moving...");
rightMotor(255);
leftMotor(255);
}
/********************/
if(distance < 10){
Serial.print(" ");
Serial.print("Backin' up.");

rightMotor(0);
leftMotor(0);
delay(200);

rightMotor(-255);
leftMotor(-255);
delay(backupTime);

rightMotor(-510);
leftMotor(510);
delay(turnTime);

Serial.print(" ");
Serial.print("Moving...");
rightMotor(255);
leftMotor(255);
}
/********************/
if(distance < 10){
Serial.print(" ");
Serial.print("Backin' up.");

rightMotor(0);
leftMotor(0);
delay(200);

rightMotor(-255);
leftMotor(-255);
delay(backupTime);

rightMotor(-510);
leftMotor(510);
delay(turnTime);

Serial.print(" ");
Serial.print("Moving...");
rightMotor(255);
leftMotor(255);
}
/********************/
if(distance < 10){
Serial.print(" ");
Serial.print("Backin' up.");

rightMotor(0);
leftMotor(0);
delay(200);

rightMotor(-255);
leftMotor(-255);
delay(backupTime);

rightMotor(-510);
leftMotor(510);
delay(turnTime);

Serial.print(" ");
Serial.print("Moving...");
rightMotor(255);
leftMotor(255);
}
/********************/
if(distance < 10){
Serial.print(" ");
Serial.print("Backin' up.");

rightMotor(0);
leftMotor(0);
delay(200);

rightMotor(-255);
leftMotor(-255);
delay(backupTime);

rightMotor(510);
leftMotor(-510);
delay(turnTime);

Serial.print(" ");
Serial.print("Moving...");
rightMotor(255);
leftMotor(255);
}
/********************/
} else{
rightMotor(0);
leftMotor(0);
}
delay(50);
}

/*************************************************************************************************/
void rightMotor(int motorSpeed)
{
if (motorSpeed > 0)
{
digitalWrite(AIN1, HIGH);
digitalWrite(AIN2, LOW);
}
else if (motorSpeed < 0)
{
digitalWrite(AIN1, LOW);
digitalWrite(AIN2, HIGH);
}
else
{
digitalWrite(AIN1, LOW);
digitalWrite(AIN2, LOW);
}
analogWrite(PWMA, abs(motorSpeed));
}

/*************************************************************************************************/
void leftMotor(int motorSpeed)
{
if (motorSpeed > 0)
{
digitalWrite(BIN1, HIGH);
digitalWrite(BIN2, LOW);
}
else if (motorSpeed < 0)
{
digitalWrite(BIN1, LOW);
digitalWrite(BIN2, HIGH);
}
else
{
digitalWrite(BIN1, LOW);
digitalWrite(BIN2, LOW);
}
analogWrite(PWMB, abs(motorSpeed));
}

/*************************************************************************************************/
float getDistance()
{
float echoTime;
float calcualtedDistance;

digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);

echoTime = pulseIn(echoPin, HIGH);

calcualtedDistance = echoTime / 148.0;

return calcualtedDistance;
}

What am I doing wrong?

Well, help us help you. What distances are shown on your PC monitor? Could there be a problem comparing your distance (a float) to an integer?

Paul

Dear Paul,

The distances shown are in units of inches, but are presented as raw integers (I'm assuming). Is this the kind of information you're looking for?

EggMan1234:
Dear Paul,

The distances shown are in units of inches, but are presented as raw integers (I'm assuming). Is this the kind of information you're looking for?

I am looking for the float value you are comparing to the integer value "10".

Paul

Hi,
Welcome to the forum.

Please read the first post in any forum entitled how to use this forum.
http://forum.arduino.cc/index.php/topic,148850.0.html then look down to item #7 about how to post your code.
It will be formatted in a scrolling window that makes it easier to read.

Thanks.. Tom.. :slight_smile: