0% found this document useful (0 votes)
4 views

Code

Uploaded by

agakhan
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
4 views

Code

Uploaded by

agakhan
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 6

#define PIN_ANALOG_X 0

#define PIN_ANALOG_Y 1

#define X_THRESHOLD_LOW 500


#define X_THRESHOLD_HIGH 650

#define Y_THRESHOLD_LOW 400


#define Y_THRESHOLD_HIGH 550

int x_position;
int y_position;

int x_direction;
int y_direction;

#define L_M_1 5 //left motor input 1 @ pwm pin


#define L_M_2 6 //left motor input 2 @ pwm pin
#define R_M_1 10 //right motor input 1 @ pwm pin
#define R_M_2 11 //right motor input 2 @ pwm pin

#define Led_L 44 //indicator for left


#define Led_R 40 //indicator led for right
#define Led_O 42

#define trigPin 14 //sonar trigger to arduino pin


#define echoPin 15 //sonar echo to arduino pin

#define buzPin 50 //buzzer pin


// L motor values: 65, 100, 150, 200
//corresponding R motor values: 45, 75, 120, 170

#define min_clearance 10 // minimum clearance from backside is 10 cm

long duration, cm, inches,distance;

void setup() {

pinMode(L_M_1,OUTPUT); // for motor


pinMode(L_M_2,OUTPUT);
pinMode(R_M_1,OUTPUT);
pinMode(R_M_2,OUTPUT);

pinMode(trigPin,OUTPUT); //sonar sensor


pinMode(echoPin,INPUT);

pinMode(Led_L,OUTPUT); //sonar sensor


pinMode(Led_R,OUTPUT);
pinMode(Led_O,OUTPUT);

Serial.begin(9600);

void loop() {

x_direction = 0;
y_direction = 0;

x_position = analogRead(PIN_ANALOG_X);
y_position = analogRead(PIN_ANALOG_Y);

if (x_position > X_THRESHOLD_HIGH) {


x_direction = 1;
} else if (x_position < X_THRESHOLD_LOW) {
x_direction = -1;
}

if (y_position > Y_THRESHOLD_HIGH) {


y_direction = 1;
} else if (y_position < Y_THRESHOLD_LOW) {
y_direction = -1;
}

digitalWrite(trigPin, LOW);// The sensor is triggered by a HIGH pulse of 10 or more microseconds.


// Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
delayMicroseconds(5);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);

// Read the signal from the sensor: a HIGH pulse whose


// duration is the time (in microseconds) from the sending
// of the ping to the reception of its echo off of an object.

duration = pulseIn(echoPin, HIGH);

// convert the time into a distance


cm = (duration/2) / 29.1;
// inches = (duration/2) / 74;
distance= cm;

if (x_direction == -1)
{
if (y_direction == -1) {
Serial.println("left-down");
if(distance<= 10)
{
Serial.print(distance);
Stop(50);
Blink();

}
else
Backword(140,90,20);
} else if (y_direction == 0) {
Serial.println("left");
Turn_Left(100,20);
digitalWrite(Led_L,HIGH);
}
else
{
// y_direction == 1
Serial.println("left-up");
Forword(150,120,10);
}
}
else if (x_direction == 0)
{
if (y_direction == -1)
{
Serial.println("down");
if(distance<= 10)
{
Serial.print(distance);
Stop(50);
Blink();
Buzzer(10);

}
else
{
Backword(150,120,10);
digitalWrite(Led_O,HIGH);
}
}
else if (y_direction == 0)
{
Serial.println("centered");
Stop(250);
}
else
{
// y_direction == 1
Serial.println("Forword");
Forword(140,115,30);
}
}
else
{
// x_direction == 1
if (y_direction == -1)
{
Serial.println("right-down");
if(distance<= 5)
{
Serial.print(distance);
Blink();
Stop(100);
Buzzer(10);
}
else
{
Backword(150,120,10);
digitalWrite(Led_O,HIGH);
}
}
else if (y_direction == 0)
{
Serial.println("right");
Turn_Right(130,20);
digitalWrite(Led_R,HIGH);
}
else
{
// y_direction == 1
Serial.println("right-up");
Forword(150,125,10);
}
}
delay(250);
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Forword(int i,int j,int k)
//both motor are forword
{
//lcd.print("FORWORD");
Serial.println("\t \t FORWORD");

analogWrite(L_M_1,i); // left motor is forword


analogWrite(L_M_2,0);

analogWrite(R_M_1,j); // right motor is forword


analogWrite(R_M_2,0);
digitalWrite(Led_L,LOW);
digitalWrite(Led_R,LOW);
digitalWrite(Led_O,LOW);

delay(k);
}
void Backword(int i,int j,int k)
//both motor are backword
{
Serial.println("\t \t BACKWORD");

analogWrite(L_M_1,0); // left motor is backword


analogWrite(L_M_2,i);

analogWrite(R_M_1,0); // right motor is backword


analogWrite(R_M_2,j);

delay(k);
}

void Turn_Left(int i,int j)


//Left motor is off
//Right motor is forword
{
Serial.println("\t \t Left Turn");

analogWrite(L_M_1,0); // left motor is off


analogWrite(L_M_2,0);

analogWrite(R_M_1,i); // right motor is forword


analogWrite(R_M_2,0);
digitalWrite(Led_R,LOW);
digitalWrite(Led_O,LOW);

delay(j);
}

void Turn_Right(int i,int j)


//Right motor is off
//left motor is forword
{
Serial.println("\t \t Turn Right");
analogWrite(L_M_1,i); // left motor is forword
analogWrite(L_M_2,0);

analogWrite(R_M_1,0); // right motor is off


analogWrite(R_M_2,0);
digitalWrite(Led_L,LOW);
digitalWrite(Led_O,LOW);

delay(j);
}

void Stop(int k)
//Both motor is stopped
{
Serial.println("\t \t STOP");

analogWrite(L_M_1,0); //left motor is off


analogWrite(L_M_2,0);

analogWrite(R_M_1,0);//right motor is off


analogWrite(R_M_2,0);
digitalWrite(Led_L,LOW);
digitalWrite(Led_R,LOW);
delay(k);
}

void Blink()
{
digitalWrite(Led_O,HIGH);
digitalWrite(Led_O,HIGH);
digitalWrite(Led_O,HIGH);
delay(20);
digitalWrite(Led_O,LOW);
digitalWrite(Led_O,LOW);
digitalWrite(Led_O,LOW);
delay(20);
digitalWrite(Led_O,HIGH);
delay(20);
digitalWrite(Led_O,LOW);
delay(20);

}
void Buzzer(int i) // here i is the frequency in KHz
{
for (int j=0;j<100;j++)
{
long T=1000/i; //frequency converted into Time(cycle) mili seconds
digitalWrite(buzPin,HIGH);
delay(T/2); //half cycle time on
digitalWrite(buzPin,LOW);
delay(T/2); // half cycle time off
}
}

You might also like