So I have created a method to read and return Ultrasonic Sensor Data. I have 2 Ultrasonic Sensors.
Below is my code.
// Ultrasonic Pins
#define T1 2
#define E2 4
#define E1 3
#define T2 5
// Motor Pins
#define M1 7
#define M2 8
#define M3 9
#define M4 10
// Motor Movements Definition
enum MOTOR
{
FORWARD,
BACKWARD,
LEFT,
RIGHT,
STOP
};
long duration1, distance1, duration2, distance2;
void setup()
{
Serial.begin(9600);
pinMode(E1, INPUT);
pinMode(E2, INPUT);
pinMode(T1, OUTPUT);
pinMode(T2, OUTPUT);
pinMode(M1, OUTPUT);
pinMode(M2, OUTPUT);
pinMode(M3, OUTPUT);
pinMode(M4, OUTPUT);
Motor(STOP);
}
void loop()
{
// If Both Sensors detect object then go in backward Direction
while (DetectObject(T1,E1,1) < 10 && DetectObject(T2,E2,2) < 10)
{
Serial.println("Backward");
Motor(BACKWARD);
delay(200);
Motor(STOP);
delay(50);
}
// If Left Sensor detect object then go in Right Direction
while (DetectObject(T1,E1,1) < 10 && DetectObject(T2,E2,2) > 10)
{
Serial.println("Right");
Motor(RIGHT);
delay(200);
Motor(STOP);
delay(50);
}
// If Right Sensor detect object then go in Left Direction
while (DetectObject(T1,E1,1) > 10 && DetectObject(T2,E2,2) < 10)
{
Serial.println("Left");
Motor(LEFT);
delay(200);
Motor(STOP);
delay(50);
}
// If Both Sensors detect no object then go in Forward Direction
while (DetectObject(T1,E1,1) > 10 && DetectObject(T2,E2,2) > 10)
{
Serial.println("Forward");
Motor(FORWARD);
delay(200);
Motor(STOP);
delay(50);
}
}
void Motor(MOTOR motor)
{
switch (motor)
{
case STOP:
digitalWrite(M1, LOW);
digitalWrite(M2, LOW);
digitalWrite(M3, LOW);
digitalWrite(M4, LOW);
break;
case FORWARD:
digitalWrite(M1, HIGH);
digitalWrite(M2, LOW);
digitalWrite(M3, HIGH);
digitalWrite(M4, LOW);
break;
case BACKWARD:
digitalWrite(M1, LOW);
digitalWrite(M2, HIGH);
digitalWrite(M3, LOW);
digitalWrite(M4, HIGH);
break;
case LEFT:
digitalWrite(M1, HIGH);
digitalWrite(M2, LOW);
digitalWrite(M3, LOW);
digitalWrite(M4, HIGH);
break;
case RIGHT:
digitalWrite(M1, LOW);
digitalWrite(M2, HIGH);
digitalWrite(M3, HIGH);
digitalWrite(M4, LOW);
break;
default:
break;
}
delay(100);
}
long DetectObject(uint8_t trigPin, uint8_t echoPin, int sensorNo)
{
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
Serial.print("Distance Sensor");
Serial.print(sensorNo);
Serial.print(": ");
Serial.print(pulseIn(echoPin, HIGH) * 0.034 / 2);
Serial.println(" cm");
return pulseIn(echoPin, HIGH) * 0.034 / 2;
}
I am getting continuously getting Backward in the Serial monitor.
Output of Serial Monitor -
Distance Sensor1: 20 cm
Distance Sensor2: 15 cm
Backward
Distance Sensor1: 17 cm
Distance Sensor2: 21 cm
Backward
Distance Sensor1: 24 cm
Distance Sensor2: 9 cm
Backward
But when I created 2 different methods for each Ultrasonic Sensor. It is working fine.
I want to have a single method for N number of Ultrasonic Sensors.
Thanks in Advance!
if (Det1 < 10 && Det2 < 10 ) . . .