// Pin definitions
const int trigPinLeft = 8;
const int echoPinLeft = 9;
const int trigPinRight = 10;
const int echoPinRight = 11;
const int motorLeftForward = 4;
const int motorLeftBackward = 5;
const int motorRightForward = 6;
const int motorRightBackward = 7;
// Threshold distance (in cm)
const int thresholdDistance = 20;
void setup() {
// Set motor pins as output
pinMode(motorLeftForward, OUTPUT);
pinMode(motorLeftBackward, OUTPUT);
pinMode(motorRightForward, OUTPUT);
pinMode(motorRightBackward, OUTPUT);
// Set ultrasonic sensor pins
pinMode(trigPinLeft, OUTPUT);
pinMode(echoPinLeft, INPUT);
pinMode(trigPinRight, OUTPUT);
pinMode(echoPinRight, INPUT);
// Start the serial communication
Serial.begin(9600);
}
void loop() {
// Measure distance from left sensor
long distanceLeft = measureDistance(trigPinLeft, echoPinLeft);
// Measure distance from right sensor
long distanceRight = measureDistance(trigPinRight, echoPinRight);
// Decision-making logic
if (distanceLeft < thresholdDistance && distanceRight < thresholdDistance) {
// If obstacles are detected on both sides, choose the best direction
if (distanceLeft > distanceRight) {
turnLeft();
} else {
turnRight();
}
} else if (distanceLeft < thresholdDistance) {
// If obstacle on the left, turn right
turnRight();
} else if (distanceRight < thresholdDistance) {
// If obstacle on the right, turn left
turnLeft();
} else {
// Move forward if no obstacle is detected
moveForward();
}
delay(100);
}
long measureDistance(int trigPin, int echoPin) {
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
return distance;
}
void moveForward() {
digitalWrite(motorLeftForward, HIGH);
digitalWrite(motorLeftBackward, LOW);
digitalWrite(motorRightForward, HIGH);
digitalWrite(motorRightBackward, LOW);
}
void moveBackward() {
digitalWrite(motorLeftForward, LOW);
digitalWrite(motorLeftBackward, HIGH);
digitalWrite(motorRightForward, LOW);
digitalWrite(motorRightBackward, HIGH);
}
void stopCar() {
digitalWrite(motorLeftForward, LOW);
digitalWrite(motorLeftBackward, LOW);
digitalWrite(motorRightForward, LOW);
digitalWrite(motorRightBackward, LOW);
}
void turnRight() {
digitalWrite(motorLeftForward, HIGH);
digitalWrite(motorLeftBackward, LOW);
digitalWrite(motorRightForward, LOW);
digitalWrite(motorRightBackward, HIGH);
}
void turnLeft() {
digitalWrite(motorLeftForward, LOW);
digitalWrite(motorLeftBackward, HIGH);
digitalWrite(motorRightForward, HIGH);
digitalWrite(motorRightBackward, LOW);
}