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;
}
}
}