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?