Bluetooth Controlled Car - Implementing a HC-SR04 Ultrasonic Sensor

Hi there, I am currently having a problem after trying to include a HC-SR04 ultrasonic sensor into my Arduino code. Prior to this issue and the change in code, I was able to run the car using the Bluetooth module and an android application, I made more of a simpler car to start with and wanted to add off that as I am new to Arduino.

Currently, I am trying to use the Trig and Echo pins with A2 and A3, as I have no current digital slots available, this is the same for the buzzer at A4. My goal was to introduce a parking sensor in a sense using the HC-SR04 and a Buzzer, where the buzzer would sound out at different distances as the car gets closer to an object or wall.

I am just unsure as to what the issue is as this is still new code which I am trying out and will continue to look into to try and find the issue, as I am unsure if its because I am using analog instead of digital and need to change the code slightly to match that, or if it has anything to do with the speed that I added for the room tempt. But any help would be greatly appreciated also.

Incase any information is needed on my design itself, I am using an Arduino R3 board, with 2 L249N Motor Drivers, these 2 drivers fill up the whole digital side of the Arduino board, minus 2 pins which are for my Bluetooth module. I have a breadboard included also just for my ground connections, Bluetooth module pos/ground connections, Ultrasonic Sensor pos/ground connections and LED connections which connects to the 5V supply of the Arduino board. I have the Motor driver connected up to my Vin, and the power supply is connected to 2 switches, 1 which leads into my Arduino board, followed by a 2nd for the motor drivers itself. I don't currently have a schematic so apologies if this section is confusing at all.

Also hopefully I do this right, but here is the code altogether with the added code for the ultrasonic sensor.

#define light_FRFL  A0    //For the Front Right LED  pin A0 for Arduino Uno
#define light_BRBL  A1    //For the Back Right LED   pin A1 for Arduino Uno
#define trigPin A2       //Ultrasound pin A2 for Arduino Uno;
#define echoPin A3       //Ultrasound pin A3 for Arduino Uno;

#define ENA_m1 5        // Enable A/speed of the Front Right motor 
#define ENB_m1 6        // Enable B/speed of the Back Right motor
#define ENA_m2 10       // Enable A/speed of the Front Left motor
#define ENB_m2 11       // Enable B/speed of the Back Left motor

#define IN_11  2        // L298N #1 input 1 for the Front Right motor
#define IN_12  3        // L298N #1 input 2 for the Front Right motor
#define IN_13  4        // L298N #1 input 3 for the Back Right motor
#define IN_14  7        // L298N #1 input 4 for the Back Right motor

#define IN_21  8        // L298N #2 input 1 for the Front Left motor
#define IN_22  9        // L298N #2 input 2 for the Front Left motor
#define IN_23  12       // L298N #2 input 3 for the Back Left motor
#define IN_24  13       // L298N #2 input 4 for the Back Left motor

int command;            //Int to store app command state
int speedCar = 100;     // Speed ranges from 50 - 255
int speed_Coeff = 4;
boolean lightFront = false;
boolean lightBack = false;
int buzPin = A4;        //declare pin for the buzzer;
float speed = 0.0347;   //declare speed of sound in air @ room temp;
float dist;             //declare variable for containing distance sensed;
float pingTime;         //declare variable for containing echo time;
int buzNear = 20;       //declare buzzing time for very close proximity;
int buzHigh = 50;       //declare buzzing time for close proximity;
int buzMid  =130;       //declare buzzing time for mid proximity;
int buzFar = 500;       //declare buzzing time for far off object;
int delayFar = 260;

void setup() {  
   
    pinMode(light_FRFL, OUTPUT);
    pinMode(light_BRBL, OUTPUT);
    
    pinMode(ENA_m1, OUTPUT);
    pinMode(ENB_m1, OUTPUT);
    pinMode(ENA_m2, OUTPUT);
    pinMode(ENB_m2, OUTPUT);
  
    pinMode(IN_11, OUTPUT);
    pinMode(IN_12, OUTPUT);
    pinMode(IN_13, OUTPUT);
    pinMode(IN_14, OUTPUT);
    
    pinMode(IN_21, OUTPUT);
    pinMode(IN_22, OUTPUT);
    pinMode(IN_23, OUTPUT);
    pinMode(IN_24, OUTPUT);
    
    pinMode(buzPin,OUTPUT);     //set buzzer pin as output;
    pinMode(trigPin, OUTPUT);   //Set trigger pin as output;      
    pinMode(echoPin, INPUT);    //set echo pin as input;
   

  Serial.begin(9600); 

  } 

void goAhead(){ 

      digitalWrite(IN_11, HIGH);
      digitalWrite(IN_12, LOW);
      analogWrite(ENA_m1, speedCar);

      digitalWrite(IN_13, LOW);
      digitalWrite(IN_14, HIGH);
      analogWrite(ENB_m1, speedCar);

      digitalWrite(IN_21, LOW);
      digitalWrite(IN_22, HIGH);
      analogWrite(ENA_m2, speedCar);

      digitalWrite(IN_23, HIGH);
      digitalWrite(IN_24, LOW);
      analogWrite(ENB_m2, speedCar);

  }

void goBack(){ 

      digitalWrite(IN_11, LOW);
      digitalWrite(IN_12, HIGH);
      analogWrite(ENA_m1, speedCar);

      digitalWrite(IN_13, HIGH);
      digitalWrite(IN_14, LOW);
      analogWrite(ENB_m1, speedCar);

      digitalWrite(IN_21, HIGH);
      digitalWrite(IN_22, LOW);
      analogWrite(ENA_m2, speedCar);

      digitalWrite(IN_23, LOW);
      digitalWrite(IN_24, HIGH);
      analogWrite(ENB_m2, speedCar);

  }

void goRight(){ 

      digitalWrite(IN_11, LOW);
      digitalWrite(IN_12, HIGH);
      analogWrite(ENA_m1, speedCar);

      digitalWrite(IN_13, HIGH);
      digitalWrite(IN_14, LOW);
      analogWrite(ENB_m1, speedCar);

      digitalWrite(IN_21, LOW);
      digitalWrite(IN_22, HIGH);
      analogWrite(ENA_m2, speedCar);

      digitalWrite(IN_23, HIGH);
      digitalWrite(IN_24, LOW);
      analogWrite(ENB_m2, speedCar);

  }

void goLeft(){

      digitalWrite(IN_11, HIGH);
      digitalWrite(IN_12, LOW);
      analogWrite(ENA_m1, speedCar);

      digitalWrite(IN_13, LOW);
      digitalWrite(IN_14, HIGH);
      analogWrite(ENB_m1, speedCar);

        
      digitalWrite(IN_21, HIGH);
      digitalWrite(IN_22, LOW);
      analogWrite(ENA_m2, speedCar);

      digitalWrite(IN_23, LOW);
      digitalWrite(IN_24, HIGH);
      analogWrite(ENB_m2, speedCar);

        
  }

void goAheadRight(){
      
      digitalWrite(IN_11, HIGH);
      digitalWrite(IN_12, LOW);
      analogWrite(ENA_m1, speedCar/speed_Coeff);

      digitalWrite(IN_13, LOW);
      digitalWrite(IN_14, HIGH);
      analogWrite(ENB_m1, speedCar/speed_Coeff);

      digitalWrite(IN_21, LOW);
      digitalWrite(IN_22, HIGH);
      analogWrite(ENA_m2, speedCar);

      digitalWrite(IN_23, HIGH);
      digitalWrite(IN_24, LOW);
      analogWrite(ENB_m2, speedCar);
 
  }

void goAheadLeft(){
      
      digitalWrite(IN_11, HIGH);
      digitalWrite(IN_12, LOW);
      analogWrite(ENA_m1, speedCar);

      digitalWrite(IN_13, LOW);
      digitalWrite(IN_14, HIGH);
      analogWrite(ENB_m1, speedCar);

      digitalWrite(IN_21, LOW);
      digitalWrite(IN_22, HIGH);
      analogWrite(ENA_m2, speedCar/speed_Coeff);

      digitalWrite(IN_23, HIGH);
      digitalWrite(IN_24, LOW);
      analogWrite(ENB_m2, speedCar/speed_Coeff);
 
  }

void goBackRight(){ 

      digitalWrite(IN_11, LOW);
      digitalWrite(IN_12, HIGH);
      analogWrite(ENA_m1, speedCar/speed_Coeff);

      digitalWrite(IN_13, HIGH);
      digitalWrite(IN_14, LOW);
      analogWrite(ENB_m1, speedCar/speed_Coeff);

      digitalWrite(IN_21, HIGH);
      digitalWrite(IN_22, LOW);
      analogWrite(ENA_m2, speedCar);

      digitalWrite(IN_23, LOW);
      digitalWrite(IN_24, HIGH);
      analogWrite(ENB_m2, speedCar);

  }

void goBackLeft(){ 

      digitalWrite(IN_11, LOW);
      digitalWrite(IN_12, HIGH);
      analogWrite(ENA_m1, speedCar);

      digitalWrite(IN_13, HIGH);
      digitalWrite(IN_14, LOW);
      analogWrite(ENB_m1, speedCar);

      digitalWrite(IN_21, HIGH);
      digitalWrite(IN_22, LOW);
      analogWrite(ENA_m2, speedCar/speed_Coeff);

      digitalWrite(IN_23, LOW);
      digitalWrite(IN_24, HIGH);
      analogWrite(ENB_m2, speedCar/speed_Coeff);

  }

void stopRobot(){  

      digitalWrite(IN_11, LOW);
      digitalWrite(IN_12, LOW);
      analogWrite(ENA_m1, speedCar);

      digitalWrite(IN_13, LOW);
      digitalWrite(IN_14, LOW);
      analogWrite(ENB_m1, speedCar);

  
      digitalWrite(IN_21, LOW);
      digitalWrite(IN_22, LOW);
      analogWrite(ENA_m2, speedCar);

      
      digitalWrite(IN_23, LOW);
      digitalWrite(IN_24, LOW);
      analogWrite(ENB_m2, speedCar);
  
  }
  
void loop(){
  
if (Serial.available() > 0) {
  command = Serial.read();
  stopRobot();      //Initialize with motors stopped

if (lightFront) {digitalWrite(light_FRFL, HIGH);}
if (!lightFront) {digitalWrite(light_FRFL, LOW);}
if (lightBack) {digitalWrite(light_BRBL, HIGH);}
if (!lightBack) {digitalWrite(light_BRBL, LOW);}

 digitalWrite(trigPin,LOW);
  delayMicroseconds(20);
  digitalWrite(trigPin,HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin,LOW);          //creating a pulse for sensing distance;
  pingTime = pulseIn(echoPin,HIGH);   //read the echoTime, &hence the distance;
  dist = (speed*pingTime*0.5);        
  
  if(dist<=10.0){
    digitalWrite(buzPin,HIGH);         //conditional statements changing frequency based upon the distance sensed;
    delay(20);
    digitalWrite(buzPin,LOW);
    delay(20);
  }  
  else if(dist<=20.0 && dist>10.0)
  {
    digitalWrite(buzPin,HIGH);
    delay(buzHigh);
    digitalWrite(buzPin,LOW);
    delay(buzHigh);
  }
  else if((dist>20.0) && (dist<40.0))
  {
    digitalWrite(buzPin,HIGH);
    delay(buzMid);
    digitalWrite(buzPin,LOW);
    delay(buzMid);
  }
  else if(dist>=40.0 && dist<80.0)
  {
    digitalWrite(buzPin,HIGH);
    delay(buzFar);
    digitalWrite(buzPin,LOW);
    delay(delayFar);
  }


switch (command) {
case 'F':goAhead();break;
case 'B':goBack();break;
case 'L':goLeft();break;
case 'R':goRight();break;
case 'I':goAheadRight();break;
case 'G':goAheadLeft();break;
case 'J':goBackRight();break;
case 'H':goBackLeft();break;
case '0':speedCar = 100;break;
case '1':speedCar = 115;break;
case '2':speedCar = 130;break;
case '3':speedCar = 145;break;
case '4':speedCar = 160;break;
case '5':speedCar = 175;break;
case '6':speedCar = 190;break;
case '7':speedCar = 205;break;
case '8':speedCar = 220;break;
case '9':speedCar = 235;break;
case 'q':speedCar = 255;break;
case 'W':lightFront = true;break;
case 'w':lightFront = false;break;
case 'U':lightBack = true;break;
case 'u':lightBack = false;break;

}
}
}

Here is the code that I have added above just so it is easier to see what I have included.

#define trigPin A2       //Ultrasound pin A2 for Arduino Uno;
#define echoPin A3       //Ultrasound pin A3 for Arduino Uno;
int buzPin = A4;        //declare pin for the buzzer;
float speed = 0.0347;   //declare speed of sound in air @ room temp;
float dist;             //declare variable for containing distance sensed;
float pingTime;         //declare variable for containing echo time;
int buzNear = 20;       //declare buzzing time for very close proximity;
int buzHigh = 50;       //declare buzzing time for close proximity;
int buzMid  =130;       //declare buzzing time for mid proximity;
int buzFar = 500;       //declare buzzing time for far off object;
int delayFar = 260;

void setup() {
pinMode(buzPin,OUTPUT);     //set buzzer pin as output;
    pinMode(trigPin, OUTPUT);   //Set trigger pin as output;      
    pinMode(echoPin, INPUT);    //set echo pin as input;
   
void loop() {
digitalWrite(trigPin,LOW);
  delayMicroseconds(20);
  digitalWrite(trigPin,HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin,LOW);          //creating a pulse for sensing distance;
  pingTime = pulseIn(echoPin,HIGH);   //read the echoTime, &hence the distance;
  dist = (speed*pingTime*0.5);        
  
  if(dist<=10.0){
    digitalWrite(buzPin,HIGH);         //conditional statements changing frequency based upon the distance sensed;
    delay(20);
    digitalWrite(buzPin,LOW);
    delay(20);
  }  
  else if(dist<=20.0 && dist>10.0)
  {
    digitalWrite(buzPin,HIGH);
    delay(buzHigh);
    digitalWrite(buzPin,LOW);
    delay(buzHigh);
  }
  else if((dist>20.0) && (dist<40.0))
  {
    digitalWrite(buzPin,HIGH);
    delay(buzMid);
    digitalWrite(buzPin,LOW);
    delay(buzMid);
  }
  else if(dist>=40.0 && dist<80.0)
  {
    digitalWrite(buzPin,HIGH);
    delay(buzFar);
    digitalWrite(buzPin,LOW);
    delay(delayFar);
  }

and just in case, here is the fully working code without the ultrasonic code included.

#define light_FRFL  A0    //For the Front Right LED  pin A0 for Arduino Uno
#define light_BRBL  A1    //For the Back Right LED   pin A1 for Arduino Uno

#define ENA_m1 5        // Enable A/speed of the Front Right motor 
#define ENB_m1 6        // Enable B/speed of the Back Right motor
#define ENA_m2 10       // Enable A/speed of the Front Left motor
#define ENB_m2 11       // Enable B/speed of the Back Left motor

#define IN_11  2        // L298N #1 input 1 for the Front Right motor
#define IN_12  3        // L298N #1 input 2 for the Front Right motor
#define IN_13  4        // L298N #1 input 3 for the Back Right motor
#define IN_14  7        // L298N #1 input 4 for the Back Right motor

#define IN_21  8        // L298N #2 input 1 for the Front Left motor
#define IN_22  9        // L298N #2 input 2 for the Front Left motor
#define IN_23  12       // L298N #2 input 3 for the Back Left motor
#define IN_24  13       // L298N #2 input 4 for the Back Left motor

int command;            //Int to store app command state
int speedCar = 100;     // Speed ranges from 50 - 255
int speed_Coeff = 4;
boolean lightFront = false;
boolean lightBack = false;

void setup() {  
   
    pinMode(light_FRFL, OUTPUT);
    pinMode(light_BRBL, OUTPUT);
    
    pinMode(ENA_m1, OUTPUT);
    pinMode(ENB_m1, OUTPUT);
    pinMode(ENA_m2, OUTPUT);
    pinMode(ENB_m2, OUTPUT);
  
    pinMode(IN_11, OUTPUT);
    pinMode(IN_12, OUTPUT);
    pinMode(IN_13, OUTPUT);
    pinMode(IN_14, OUTPUT);
    
    pinMode(IN_21, OUTPUT);
    pinMode(IN_22, OUTPUT);
    pinMode(IN_23, OUTPUT);
    pinMode(IN_24, OUTPUT);
   
  Serial.begin(9600); 

  } 

void goAhead(){ 

      digitalWrite(IN_11, HIGH);
      digitalWrite(IN_12, LOW);
      analogWrite(ENA_m1, speedCar);

      digitalWrite(IN_13, LOW);
      digitalWrite(IN_14, HIGH);
      analogWrite(ENB_m1, speedCar);

      digitalWrite(IN_21, LOW);
      digitalWrite(IN_22, HIGH);
      analogWrite(ENA_m2, speedCar);

      digitalWrite(IN_23, HIGH);
      digitalWrite(IN_24, LOW);
      analogWrite(ENB_m2, speedCar);

  }

void goBack(){ 

      digitalWrite(IN_11, LOW);
      digitalWrite(IN_12, HIGH);
      analogWrite(ENA_m1, speedCar);

      digitalWrite(IN_13, HIGH);
      digitalWrite(IN_14, LOW);
      analogWrite(ENB_m1, speedCar);

      digitalWrite(IN_21, HIGH);
      digitalWrite(IN_22, LOW);
      analogWrite(ENA_m2, speedCar);

      digitalWrite(IN_23, LOW);
      digitalWrite(IN_24, HIGH);
      analogWrite(ENB_m2, speedCar);

  }

void goRight(){ 

      digitalWrite(IN_11, LOW);
      digitalWrite(IN_12, HIGH);
      analogWrite(ENA_m1, speedCar);

      digitalWrite(IN_13, HIGH);
      digitalWrite(IN_14, LOW);
      analogWrite(ENB_m1, speedCar);

      digitalWrite(IN_21, LOW);
      digitalWrite(IN_22, HIGH);
      analogWrite(ENA_m2, speedCar);

      digitalWrite(IN_23, HIGH);
      digitalWrite(IN_24, LOW);
      analogWrite(ENB_m2, speedCar);

  }

void goLeft(){

      digitalWrite(IN_11, HIGH);
      digitalWrite(IN_12, LOW);
      analogWrite(ENA_m1, speedCar);

      digitalWrite(IN_13, LOW);
      digitalWrite(IN_14, HIGH);
      analogWrite(ENB_m1, speedCar);

        
      digitalWrite(IN_21, HIGH);
      digitalWrite(IN_22, LOW);
      analogWrite(ENA_m2, speedCar);

      digitalWrite(IN_23, LOW);
      digitalWrite(IN_24, HIGH);
      analogWrite(ENB_m2, speedCar);

        
  }

void goAheadRight(){
      
      digitalWrite(IN_11, HIGH);
      digitalWrite(IN_12, LOW);
      analogWrite(ENA_m1, speedCar/speed_Coeff);

      digitalWrite(IN_13, LOW);
      digitalWrite(IN_14, HIGH);
      analogWrite(ENB_m1, speedCar/speed_Coeff);

      digitalWrite(IN_21, LOW);
      digitalWrite(IN_22, HIGH);
      analogWrite(ENA_m2, speedCar);

      digitalWrite(IN_23, HIGH);
      digitalWrite(IN_24, LOW);
      analogWrite(ENB_m2, speedCar);
 
  }

void goAheadLeft(){
      
      digitalWrite(IN_11, HIGH);
      digitalWrite(IN_12, LOW);
      analogWrite(ENA_m1, speedCar);

      digitalWrite(IN_13, LOW);
      digitalWrite(IN_14, HIGH);
      analogWrite(ENB_m1, speedCar);

      digitalWrite(IN_21, LOW);
      digitalWrite(IN_22, HIGH);
      analogWrite(ENA_m2, speedCar/speed_Coeff);

      digitalWrite(IN_23, HIGH);
      digitalWrite(IN_24, LOW);
      analogWrite(ENB_m2, speedCar/speed_Coeff);
 
  }

void goBackRight(){ 

      digitalWrite(IN_11, LOW);
      digitalWrite(IN_12, HIGH);
      analogWrite(ENA_m1, speedCar/speed_Coeff);

      digitalWrite(IN_13, HIGH);
      digitalWrite(IN_14, LOW);
      analogWrite(ENB_m1, speedCar/speed_Coeff);

      digitalWrite(IN_21, HIGH);
      digitalWrite(IN_22, LOW);
      analogWrite(ENA_m2, speedCar);

      digitalWrite(IN_23, LOW);
      digitalWrite(IN_24, HIGH);
      analogWrite(ENB_m2, speedCar);

  }

void goBackLeft(){ 

      digitalWrite(IN_11, LOW);
      digitalWrite(IN_12, HIGH);
      analogWrite(ENA_m1, speedCar);

      digitalWrite(IN_13, HIGH);
      digitalWrite(IN_14, LOW);
      analogWrite(ENB_m1, speedCar);

      digitalWrite(IN_21, HIGH);
      digitalWrite(IN_22, LOW);
      analogWrite(ENA_m2, speedCar/speed_Coeff);

      digitalWrite(IN_23, LOW);
      digitalWrite(IN_24, HIGH);
      analogWrite(ENB_m2, speedCar/speed_Coeff);

  }

void stopRobot(){  

      digitalWrite(IN_11, LOW);
      digitalWrite(IN_12, LOW);
      analogWrite(ENA_m1, speedCar);

      digitalWrite(IN_13, LOW);
      digitalWrite(IN_14, LOW);
      analogWrite(ENB_m1, speedCar);

  
      digitalWrite(IN_21, LOW);
      digitalWrite(IN_22, LOW);
      analogWrite(ENA_m2, speedCar);

      
      digitalWrite(IN_23, LOW);
      digitalWrite(IN_24, LOW);
      analogWrite(ENB_m2, speedCar);
  
  }
  
void loop(){
  
if (Serial.available() > 0) {
  command = Serial.read();
  stopRobot();      //Initialize with motors stopped

if (lightFront) {digitalWrite(light_FRFL, HIGH);}
if (!lightFront) {digitalWrite(light_FRFL, LOW);}
if (lightBack) {digitalWrite(light_BRBL, HIGH);}
if (!lightBack) {digitalWrite(light_BRBL, LOW);}


switch (command) {
case 'F':goAhead();break;
case 'B':goBack();break;
case 'L':goLeft();break;
case 'R':goRight();break;
case 'I':goAheadRight();break;
case 'G':goAheadLeft();break;
case 'J':goBackRight();break;
case 'H':goBackLeft();break;
case '0':speedCar = 100;break;
case '1':speedCar = 115;break;
case '2':speedCar = 130;break;
case '3':speedCar = 145;break;
case '4':speedCar = 160;break;
case '5':speedCar = 175;break;
case '6':speedCar = 190;break;
case '7':speedCar = 205;break;
case '8':speedCar = 220;break;
case '9':speedCar = 235;break;
case 'q':speedCar = 255;break;
case 'W':lightFront = true;break;
case 'w':lightFront = false;break;
case 'U':lightBack = true;break;
case 'u':lightBack = false;break;

}
}
}

As you are writing that you are using trig and echo pin generally which is present in ultrasonic sensor attaching to A2 and A3 which is input pin.
But in the code

You have wrote 16 17 as pin number so except of that write A2 and A3 and also define A2 and A3 as output in void setup

Ahh ok, thanks for the information, I had seen people use 18/19 for example and name it A3 A4 in the //. So I didn't know if this would affect it at all, but I will change this