I am using arduino uno and l293d motor driver shield. I have a problem using hcsr04 ultrasonic sensor and sg-90 servo motor. When the servo motor is off, the ultrasonic sensor is working nicely but while the servo is running the ultrasonic sensor is being stopped for taking signals.I have also read the datasheet of l293d motor driver.Here is the download link::::::L293D Datasheet(PDF) - STMicroelectronics.... but I couldn't find any solution for it. I am using 2 3.7v batteries for power supply. my code is below:
#include <AFMotor.h>
#include <NewPing.h>
#include <Servo.h>
#define TRIG_PIN A0
#define ECHO_PIN A2
#define MAX_DISTANCE 1000
#define MAX_SPEED 150
#define MAX_SPEED_OFFSET 20
NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE);
AF_DCMotor motor1(1, MOTOR12_8KHZ);
AF_DCMotor motor2(2, MOTOR12_8KHZ);
AF_DCMotor motor3(3, MOTOR12_8KHZ);
AF_DCMotor motor4(4, MOTOR12_8KHZ);
Servo myservo;
boolean goesForward=false;
int distance = 100;
int speedSet = 0;
void setup() {
myservo.attach(9);
myservo.write(115);
delay(1000);
distance = readPing();
delay(1000);
Serial.begin(9600);
}
void loop() {
Serial.println(sonar.ping_cm());
delay(1);
int distanceR = 0;
int distanceL = 0;
delay(40);
if(distance<=15)
{
moveStop();
delay(100);
moveBackward();
delay(300);
moveStop();
delay(200);
distanceR = lookRight();
delay(300);
distanceL = lookLeft();
delay(300);
if(distanceR>=distanceL)
{
turnRight();
moveStop();
}else
{
turnLeft();
moveStop();
}
}else
{
moveForward();
}
distance = readPing();
}
int lookRight()
{
for(int i = 115; i >= 50; i--)
{
myservo.write(i);
delay(5);
distance = readPing();
delay(100);
}
return distance;
}
int lookLeft()
{
for(int i = 50; i <= 170; i++)
{
myservo.write(i);
delay(5);
distance = readPing();
delay(100);
}
myservo.write(115);
return distance;
}
int readPing() {
delay(10);
int cm = sonar.ping_cm();
return cm;
}
void moveStop() {
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(RELEASE);
motor4.run(RELEASE);
}
void moveForward() {
if(!goesForward)
{
goesForward=true;
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
for (speedSet = 0; speedSet <= MAX_SPEED; speedSet +=2)
{
motor1.setSpeed(speedSet);
motor2.setSpeed(speedSet);
motor3.setSpeed(speedSet);
motor4.setSpeed(speedSet);
delay(5);
}
}
}
void moveBackward() {
goesForward=false;
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2)
{
motor1.setSpeed(speedSet);
motor2.setSpeed(speedSet);
motor3.setSpeed(speedSet);
motor4.setSpeed(speedSet);
delay(5);
}
}
void turnRight() {
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
delay(350);
}
void turnLeft() {
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
delay(350);
}
Please help me.Thanks.