I have a problem with my project that is 4 wheels car interfaced by android application through a bluetooth module and contains an ultrasonic sensor for obstacles avoiding .. the problem is there is lagging between sending orders from the application and the car movement for a few seconds
this is the code that i've used :
int IN1=3;
int IN2=4;
int IN3=7;
int IN4=8;
int ENA=5;
int ENB=6;
int ABS=135;
//HC-SR04 Sensor connection
const int trigger = 11;
const int echo = 12;
float distance;
unsigned long period;
void Forward (){
digitalWrite (ENA,HIGH);
digitalWrite (ENB,HIGH);
digitalWrite (IN1,LOW);
digitalWrite (IN2,HIGH);
digitalWrite (IN3,LOW);
digitalWrite (IN4,HIGH);
}
void Backward () {
digitalWrite (ENA,HIGH);
digitalWrite (ENB,HIGH);
digitalWrite (IN1,HIGH);
digitalWrite (IN2,LOW);
digitalWrite (IN3,HIGH);
digitalWrite (IN4,LOW);
}
void Stop (){
digitalWrite (ENA,LOW);
digitalWrite (ENB,LOW);
digitalWrite (IN1,LOW);
digitalWrite (IN2,LOW);
digitalWrite (IN3,LOW);
digitalWrite (IN4,LOW);
}
void Right () {
analogWrite(ENA,ABS);
analogWrite(ENB,ABS);
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
}
void Left (){
analogWrite(ENA,ABS);
analogWrite(ENB,ABS);
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
}
void bluetooth_motion() {
byte Dir = Serial.read();
if (Dir=='1'){
Forward();
Serial.println("FORWARD");
}
else if (Dir=='2'){
Backward();
Serial.println("BACKWARD");
}
else if (Dir=='0'){
Stop();
Serial.println("STOP");
}
else if (Dir=='4'){
Right();
Serial.println("RIGHT");
}
else if (Dir=='3'){
Left();
Serial.println("LEFT");
}
}
void setup() {
// put your setup code here, to run once:
pinMode (ENA,OUTPUT);
pinMode (ENB,OUTPUT);
pinMode (IN1,OUTPUT);
pinMode (IN2,OUTPUT);
pinMode (IN3,OUTPUT);
pinMode (IN4,OUTPUT);
pinMode(trigger, OUTPUT);
pinMode(echo, INPUT);
Serial.begin(9600);
}
void loop() {
digitalWrite(trigger,LOW);
delayMicroseconds(3);
digitalWrite(trigger,HIGH);
delayMicroseconds(3);
digitalWrite(trigger,LOW);
period=pulseIn(echo,HIGH);
//distance=(period/(210^6))(340*100)
distance = float(period)/58.8;
Serial.println(distance);
delay(3);
if (Serial.available()>0) {
bluetooth_motion();
}
if (distance <= 20) {
Stop();
}
}