Hi,
I'm using an ultrasonic sensor with my Arduino so depending on the distance my 4x4 robot goes forward, backwards or makes a turn.
So far, I was able to make my robot go forward until it approaches an obstacle then it starts to go backwards. I would like now that when my robot approaches an obstacule it stop and then make a degrees turn. What instructions should I add to the following code to get that kind of turn? I would like also to make each turm for an specific period of time (not continuously) but I don´t know what instructions should I use.
Code:
/*
HC-SR04 Ping distance sensor]
VCC to arduino 5v GND to arduino GND
Echo to Arduino pin 13 Trig to Arduino pin 12
More info at: http://goo.gl/kJ8Gl
*/
#define trigPin 12
#define echoPin 13
int ENA=5;//connected to Arduino's port 5(output pwm)
int IN1=2;//connected to Arduino's port 2
int IN2=3;//connected to Arduino's port 3
int ENB=6;//connected to Arduino's port 6(output pwm)
int IN3=4;//connected to Arduino's port 4
int IN4=7;//connected to Arduino's port 7
void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ENA,OUTPUT);//output
pinMode(ENB,OUTPUT);
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
digitalWrite(ENA,LOW);
digitalWrite(ENB,LOW);//stop driving
}
void loop() {
int duration, distance;
digitalWrite(trigPin, HIGH);
delayMicroseconds(1000);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 29.1;
if (distance >= 20 || distance <= 0){
Serial.println("Out of range");
analogWrite(ENA,255);//start driving motorA
analogWrite(ENB,255);//start driving motorB
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);//setting motorA's directon
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);//setting motorB's directon
}
else {
Serial.print(distance);
Serial.println(" cm");
analogWrite(ENA,255);//start driving motorA
analogWrite(ENB,255);//start driving motorB
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);//setting motorA's directon
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);//setting motorB's directon
}
delay(500);
}
Thanks!