#include <NewPing.
h>
#include <Servo.h>
#include <AFMotor.h>
//hc-sr04 sensor
#define TRIGGER_PIN A2
#define ECHO_PIN A3
#define max_distance 50
//ir sensor
#define irLeft A0
#define irRight A1
//motor
#define MAX_SPEED 200
#define MAX_SPEED_OFFSET 20
Servo servo;
NewPing sonar(TRIGGER_PIN, ECHO_PIN, max_distance);
AF_DCMotor motor1(1, MOTOR12_1KHZ);
AF_DCMotor motor2(2, MOTOR12_1KHZ);
AF_DCMotor motor3(3, MOTOR34_1KHZ);
AF_DCMotor motor4(4, MOTOR34_1KHZ);
int distance = 0;
int leftDistance;
int rightDistance;
boolean object;
void setup() {
[Link](9600);
pinMode(irLeft, INPUT);
pinMode(irRight, INPUT);
[Link](10);
[Link](90);
[Link](120);
[Link](120);
[Link](120);
[Link](120);
void loop() {
if (digitalRead(irLeft) == 0 && digitalRead(irRight) == 0 ) {
objectAvoid();
//forword
else if (digitalRead(irLeft) == 0 && digitalRead(irRight) == 1 ) {
objectAvoid();
[Link]("TL");
//leftturn
moveLeft();
else if (digitalRead(irLeft) == 1 && digitalRead(irRight) == 0 ) {
objectAvoid();
[Link]("TR");
//rightturn
moveRight();
}
else if (digitalRead(irLeft) == 1 && digitalRead(irRight) == 1 ) {
//Stop
Stop();
void objectAvoid() {
distance = getDistance();
if (distance <= 15) {
//stop
Stop();
[Link]("Stop");
lookLeft();
lookRight();
delay(100);
if (rightDistance <= leftDistance) {
//left
object = true;
turn();
[Link]("moveLeft");
} else {
//right
object = false;
turn();
[Link]("moveRight");
delay(100);
else {
//forword
[Link]("moveforword");
moveForward();
int getDistance() {
delay(50);
int cm = sonar.ping_cm();
if (cm == 0) {
cm = 100;
return cm;
int lookLeft () {
//lock left
[Link](150);
delay(500);
leftDistance = getDistance();
delay(100);
[Link](90);
[Link]("Left:");
[Link](leftDistance);
return leftDistance;
delay(100);
int lookRight() {
//lock right
[Link](30);
delay(500);
rightDistance = getDistance();
delay(100);
[Link](90);
[Link](" ");
[Link]("Right:");
[Link](rightDistance);
return rightDistance;
delay(100);
void Stop() {
[Link](RELEASE);
[Link](RELEASE);
[Link](RELEASE);
[Link](RELEASE);
void moveForward() {
[Link](FORWARD);
[Link](FORWARD);
[Link](FORWARD);
[Link](FORWARD);
void moveBackward() {
[Link](BACKWARD);
[Link](BACKWARD);
[Link](BACKWARD);
[Link](BACKWARD);
void turn() {
if (object == false) {
[Link]("turn Right");
moveLeft();
delay(700);
moveForward();
delay(800);
moveRight();
delay(900);
if (digitalRead(irRight) == 1) {
loop();
} else {
moveForward();
else {
[Link]("turn left");
moveRight();
delay(700);
moveForward();
delay(800);
moveLeft();
delay(900);
if (digitalRead(irLeft) == 1) {
loop();
} else {
moveForward();
void moveRight() {
[Link](BACKWARD);
[Link](BACKWARD);
[Link](FORWARD);
[Link](FORWARD);
void moveLeft() {
[Link](FORWARD);
[Link](FORWARD);
[Link](BACKWARD);
[Link](BACKWARD);