#include<AFMotor.h>
#include<NewPing.h>
#include<Servo.h>
#define TRIG_PIN A0
#define ECHO_PIN A1
#define MAX_SPEED 190
#define MAX_SPEED_OFFSET 20
#define MAX_DISTANCE 200
NewPing sonar(TRIG_PIN,ECHO_PIN,MAX_DISTANCE);
AF_DCMotor motor2(2,MOTOR12_1KHZ);
AF_DCMotor motor3(3,MOTOR34_1KHZ);
Servo myservo;
boolean goesForward = false;
int distance = 100;
int speedSet = 0;
void setup() {
myservo.attach(10);
myservo.write(110);
delay(2000);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
}
void loop() {
int distanceR = 0;
int distanceL = 0;
delay(40);
if(distance<=20)
{
moveStop();
delay(100);
moveBackward();
delay(300);
moveStop();
delay(200);
distanceR = lookRight();
delay(200);
distanceL = lookLeft();
delay(200);
if(distanceR >=distanceL)
{
turnRight();
moveStop();
}else{
turnLeft();
moveStop();
}
}else
{
moveForward();
}
distance =readPing();
}
int lookRight()
{
myservo.write(50);
delay(500);
int distance = readPing();
delay(100);
myservo.write(115);
return distance;
}
int lookLeft()
{
myservo.write(170);
delay(500);
int distancee = readPing();
delay(100);
myservo.write (115);
delay(100);
}
int readPing()
{
delay(70);
int cm = sonar.ping_cm();
if(cm == 0 )
{
cm = 250;
}
return cm;
}
void moveStop(){
motor2.run(RELEASE);
motor3.run(RELEASE);
}
void moveForward()
{
if(!goesForward){
goesForward = true;
motor2.run(FORWARD);
motor3.run(FORWARD);
for(speedSet = 0;speedSet < MAX_SPEED;speedSet+=2)
{
motor2.setSpeed(speedSet);
motor3.setSpeed(speedSet);
delay(5);
}
}
}
void moveBackward(){
goesForward = false;
motor2.run(BACKWARD);
motor3.run(BACKWARD);
for(speedSet = 0;speedSet < MAX_SPEED;speedSet+=2)
{
motor2.setSpeed(speedSet);
motor3.setSpeed(speedSet);
delay(5);
}
}
void turnLeft()
{
motor2.run(BACKWARD);
motor3.run(FORWARD);
delay(500);
motor2.run(FORWARD);
motor3.run(FORWARD);
}
void turnRight()
{
motor2.run(FORWARD);
motor3.run(BACKWARD);
delay(500);
motor2.run(FORWARD);
motor3.run(FORWARD);
}
Comments