I'm building a bot that has limited path-finding capabilities but when the distance is greater than 6cm it still wants to turn.
// Motor Driver
// ENB
int enB = 3;
int in3 = 4;
int in4 = 5;
//ENA
int enA = 11;
int in1 = 10;
int in2 = 9;
// Ultrasonic Rangefinder
int ePin = 6;
int tPin =7;
float distance;
//pathfinding
int safe = 0;
int turn = 0;
void setup() {
// put your setup code here, to run once:
//Motor Driver Pins
//ENB
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(enB, OUTPUT);
//ENA
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
pinMode(enA, OUTPUT);
//Ultrasonic Rangefinder
Serial.begin(9600);
pinMode(ePin, INPUT);
pinMode(tPin, OUTPUT);
}
void ping() {
float duration;
digitalWrite(tPin, LOW);
delayMicroseconds(2);
digitalWrite(tPin, HIGH);
delayMicroseconds(10);
digitalWrite(tPin, LOW);
duration = pulseIn(ePin, HIGH);
distance = (duration / 2) * 0.0344;
if (distance >= 400 || distance <= 2){
Serial.print("Distance = ");
Serial.println("Out of range");
}
else {
Serial.print("Distance = ");
Serial.print(distance);
Serial.println(" cm");
}
delay(500);
}
void pathfind() {
if (distance >= 6 || distance <= 2) {
analogWrite(enA, 250);
analogWrite(enB, 250);
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
} else {
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
}
}
void loop() {
// put your main code here, to run repeatedly:
ping();
pathfind();
}