i have a few errors in turnings.
the bot should make a turnAround only after going straight for a while and then meeting a dead end. But, it turns anytime, anywhere as soon as all the sensors read white.
here's my code.
#define rightFarSensor A0
#define rightNearSensor A1
#define centerSensor A2
#define leftNearSensor A3
#define leftFarSensor A4
int s1;
int s2;
int s3;
int s4;
int s5;
#define rightMotor1 6
#define rightMotor2 5
#define leftMotor1 10
#define leftMotor2 9
#define leapTime 100
void setup() {
Serial.begin(115500);
pinMode(rightMotor1, OUTPUT);
pinMode(rightMotor2, OUTPUT);
pinMode(leftMotor1, OUTPUT);
pinMode(leftMotor2, OUTPUT);
}
void loop(){
readSensors();
if(s5<500 && s1<500 && (s2>500 || s3>500 || s4>500)){
straight();
}
else{
leftHandWall();
}
}
void readSensors() {
s1 = analogRead(A0);
s2 = analogRead(A1);
s3 = analogRead(A2);
s4 = analogRead(A3);
s5 = analogRead(A4);
// print out the value you read:
Serial.print("s1: ");
Serial.println(s1);
Serial.print("s2: ");
Serial.println(s2);
Serial.print("s3: ");
Serial.println(s3);
Serial.print("s4: ");
Serial.println(s4);
Serial.print("s5: ");
Serial.println(s5);
}
void leftHandWall(){
if( s5>500 && s1>500){
analogWrite(leftMotor1, 180);
analogWrite(leftMotor2, 0);
analogWrite(rightMotor1, 180);
analogWrite(rightMotor2, 0);
delay(leapTime);
readSensors();
if(s5>500 || s1>500){
done();
delay(100000);
}
else {
turnLeft();
}
}
else if(s5>500)
{
turnLeft();
}
else if(s1>500){
analogWrite(leftMotor1, 180);
analogWrite(leftMotor2, 0);
analogWrite(rightMotor1, 180);
analogWrite(rightMotor2, 0);
delay(leapTime);
readSensors();
if(s3>500) {
straight();
}
if(s1<500 && s5<500 && s3<500){
turnRight();
}
straight();
if(s1<500 && s2<500 && s3<500 && s4<500 && s5<500){
turnAround();
}
}
}
void done() {
analogWrite(leftMotor1, 0);
analogWrite(leftMotor2, 0);
analogWrite(rightMotor1, 0);
analogWrite(rightMotor2, 0);
}
void straight(){
analogWrite(leftMotor1, 180);
analogWrite(leftMotor2, 0);
analogWrite(rightMotor1, 180);
analogWrite(rightMotor2, 0);
}
void turnAround(){
analogWrite(leftMotor1, 180);
analogWrite(leftMotor2, 0);
analogWrite(rightMotor1, 180);
analogWrite(rightMotor2, 0);
delay(180);
while(analogRead(A3)<500){
analogWrite(leftMotor1, 0);
analogWrite(leftMotor2, 180);
analogWrite(rightMotor1, 180);
analogWrite(rightMotor2, 0);
delay(2);
analogWrite(leftMotor1, 0);
analogWrite(leftMotor2, 0);
analogWrite(rightMotor1, 0);
analogWrite(rightMotor2, 0);
delay(1);
}
}
void turnRight(){
analogWrite(leftMotor1, 180);
analogWrite(leftMotor2, 0);
analogWrite(rightMotor1, 0);
analogWrite(rightMotor2, 180);
}
void turnLeft(){
analogWrite(leftMotor1, 0);
analogWrite(leftMotor2, 180);
analogWrite(rightMotor1, 180);
analogWrite(rightMotor2, 0);
}