#include "NewPing.h"
int LeftMotorPlus = 9;
int LeftMotorMinus = 8;
int LeftMotorEnable = 12;
int RightMotorPlus = 11;
int RightMotorMinus = 10;
int RightMotorEnable = 13;
#define TRIGGER_PIN_RIGHT 6 // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN_RIGHT 7 // Arduino pin tied to echo pin on the ultrasonic sensor.
int distance_left;
#define TRIGGER_PIN_LEFT 2 // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN_LEFT 3
int distance_right;
#define TRIGGER_PIN_FRONT 4 // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN_FRONT 5 // Arduino pin tied to echo pin on the ultrasonic sensor.
int distance_front;
#define MAX_DISTANCE 400 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.
int min_distance;
NewPing sonar_right(TRIGGER_PIN_RIGHT, ECHO_PIN_RIGHT, MAX_DISTANCE); // NewPing setup of pins and maximum distance.
NewPing sonar_left(TRIGGER_PIN_LEFT, ECHO_PIN_LEFT, MAX_DISTANCE);
NewPing sonar_front(TRIGGER_PIN_FRONT, ECHO_PIN_FRONT, MAX_DISTANCE);
void setup()
{
pinMode(LeftMotorPlus, OUTPUT);
pinMode(LeftMotorMinus, OUTPUT);
pinMode(LeftMotorEnable, OUTPUT);
pinMode(RightMotorEnable, OUTPUT);
pinMode(RightMotorMinus , OUTPUT);
pinMode(RightMotorPlus , OUTPUT);
}
void move_forward() {
digitalWrite(LeftMotorEnable, HIGH);
digitalWrite(RightMotorEnable, HIGH);
digitalWrite(LeftMotorPlus, HIGH);
digitalWrite(LeftMotorMinus, LOW);
digitalWrite(RightMotorPlus, LOW);
digitalWrite(RightMotorMinus, HIGH);
}
void move_backward() {
digitalWrite(LeftMotorEnable, HIGH);
digitalWrite(RightMotorEnable, HIGH);
digitalWrite(LeftMotorPlus, LOW);
digitalWrite(LeftMotorMinus, HIGH);
digitalWrite(RightMotorPlus, HIGH);
digitalWrite(RightMotorMinus, LOW);
}
void turn_left() {
digitalWrite(LeftMotorEnable, HIGH);
digitalWrite(RightMotorEnable, HIGH);
digitalWrite(LeftMotorPlus, HIGH);
digitalWrite(LeftMotorMinus, LOW);
digitalWrite(RightMotorPlus, HIGH);
digitalWrite(RightMotorMinus, LOW);
}
void turn_right() {
digitalWrite(LeftMotorEnable, HIGH);
digitalWrite(RightMotorEnable, HIGH);
digitalWrite(LeftMotorPlus, LOW);
digitalWrite(LeftMotorMinus, HIGH);
digitalWrite(RightMotorPlus, LOW);
digitalWrite(RightMotorMinus, HIGH);
}
void loop() {
//move_forward();
// Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
unsigned int uS_left = sonar_left.ping(); // Send ping, get ping time in microseconds (uS).
//Serial.print("Left Sensor Ping: ");
distance_left = uS_left / US_ROUNDTRIP_CM;
//Serial.print(distance_left); // Convert ping time to distance and print result (0 = outside set distance range, no ping echo)
//Serial.println("cm");
unsigned int uS_right = sonar_right.ping(); // Send ping, get ping time in microseconds (uS).
//Serial.print("Right Sensor Ping: ");
distance_right = uS_right / US_ROUNDTRIP_CM;
//Serial.print(distance_right); // Convert ping time to distance and print result (0 = outside set distance range, no ping echo)
//Serial.println("cm");
//Serial.print("The Minimum distance of obstacle is");
unsigned int uS_front = sonar_front.ping(); // Send ping, get ping time in microseconds (uS).
//Serial.print("Right Sensor Ping: ");
distance_front = uS_front / US_ROUNDTRIP_CM;
if (distance_front > 30)
{
move_forward();
}
if (distance_front < 30)
{
if (distance_left > 30)
{
turn_left();
delay(500);
move_forward();
}
else if (distance_left < 30)
{
if (distance_right > 30)
{
turn_right();
delay(500);
move_forward();
}
else
{
move_backward();
delay(2000);
turn_left();
delay(500);
move_forward();
}
}
}
delay(50);
}