Professional Documents
Culture Documents
Smart Car Code
Smart Car Code
h>
#include <AFMotor.h>
#include <NewPing.h>
#include <SoftwareSerial.h>
#include <Servo.h>
#define TRIG_PIN A0
#define ECHO_PIN A1
#define MAX_DISTANCE 100
NewPing sonar(TRIG_PIN,ECHO_PIN,MAX_DISTANCE);
SoftwareSerial BT(0,1);
Servo myServo;
bool goesRover = false;
bool updateMemory =false;
int distanceF = 100;
int distanceR = 0;
int distanceL = 0;
int i = 200; //sets Motor speed
int j = 300; //sets turn angle
int k = 0;
int range;
int addr = 0;
int addr_Start = 1;
int addr_End = 0;
String myVoice = "forward";
char cmd;
distanceF = readPing();
delay(2000);
cmd = '9';
range = MAX_DISTANCE-20;
delay(100);
k = EEPROM.read(200);
}
void Stop()
{
motor1.run(RELEASE);
motor4.run(RELEASE);
motor2.run(RELEASE);
motor3.run(RELEASE);
}
int readPing()
{
int cm = sonar.ping_cm();
delay(200);
if(cm == 0)
{
cm = range;
}
return cm;
}
void goBackward()
{
motor1.run(BACKWARD);
motor4.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(BACKWARD);
motor1.setSpeed(i+3);
motor4.setSpeed(i-27);
motor2.setSpeed(i+3);
motor3.setSpeed(i-27);
delay(400);
Stop();
}
void goForward()
{
motor1.run(FORWARD);
motor4.run(FORWARD);
motor2.run(FORWARD);
motor3.run(FORWARD);
motor1.setSpeed(i);
motor4.setSpeed(i-25);
motor2.setSpeed(i);
motor3.setSpeed(i-25);
delay(1000);
Stop();
}
void goSmart()
{
while((goesRover) && (cmd == 's'))
{
motor1.run(FORWARD);
motor4.run(FORWARD);
motor2.run(FORWARD);
motor3.run(FORWARD);
motor1.setSpeed(i);
motor4.setSpeed(i-26);
motor2.setSpeed(i);
motor3.setSpeed(i-26);
delay(100);
distanceF = readPing();
delay(100);
void turnRight()
{
motor4.run(BACKWARD);
motor4.setSpeed(255);
motor1.run(FORWARD);
motor1.setSpeed(255);
motor3.run(BACKWARD);
motor3.setSpeed(255);
motor2.run(FORWARD);
motor2.setSpeed(255);
delay(j);
Stop();
}
void turnLeft()
{
motor1.run(BACKWARD);
motor1.setSpeed(255);
motor4.run(FORWARD);
motor4.setSpeed(255);
motor2.run(BACKWARD);
motor2.setSpeed(255);
motor3.run(FORWARD);
motor3.setSpeed(255);
delay(j);
Stop();
}
void takeTurn()
{
j = 100;
distanceR = lookRight();
delay(200);
distanceL = lookLeft();
delay(200);
if(distanceF = range)
{
goesRover = true;
goSmart();
break;
}
}
}
else if(distanceL >= distanceR)
{
while(distanceF < range)
{
turnLeft();
distanceF = readPing();
if(distanceF = range)
{
goesRover = true;
goSmart();
break;
}
}
}
}
int lookRight()
{
myServo.write(0);
int distanceR = readPing();
delay(400);
myServo.write(90);
return distanceR;
}
int lookLeft()
{
myServo.write(180);
int distanceL = readPing();
delay(400);
myServo.write(90);
return distanceL;
}
void memory_IN()
{
EEPROM.update(addr,cmd);
EEPROM.write(addr_Start,addr);
addr = addr + 1;
}
void goPath()
{
for(addr=addr_Start; addr <= addr_End; addr += 1)
{
cmd = EEPROM.read(addr);
if(cmd == 'f')
{
goForward();
delay(50);
}
else if(cmd == 'b')
{
goBackward();
delay(50);
}
else if(cmd == 'r')
{
j = 170+k;
Stop();
turnRight();
}
else if(cmd == 'l')
{
j = 170+k;
Stop();
turnLeft();
}
else if(cmd == 'u')
{
j = 335+k;
Stop();
turnRight();
}
else if(cmd == 'v')
{
j = 335+k;
Stop();
turnLeft();
}
}
}
void returnPath()
{
j = 640+k;
turnRight();
Stop();
j = 100;
void memory_OUT()
{
goPath();
delay(10000);
returnPath();
}
else if(cmd == '5') //to Start memory OUT to Retrace Path2 i.e., Room2
{
BT.println("Go Room-2");
updateMemory = false;
i = 175;
addr_End = EEPROM.read(50);
addr_Start = 51;
memory_OUT();
}
else if(cmd == '6') //to Start memory OUT to Retrace Path3 i.e., Room3
{
BT.println("Go Room-3");
updateMemory = false;
i = 175;
addr_End = EEPROM.read(100);
addr_Start = 101;
memory_OUT();
}