Hello, so as the title says I am currently making a RC car as a little project while I try to learn Arduino more. The car is a Bluetooth controlled car controlled using a HC-06 Bluetooth Module. My main issue currently is that I have made the design minus a schematic, made the code for the basics of the car and how it will run, having lights, working with the Bluetooth application via an android phone etc, but I am wanting to now add a ultrasonic sensor, HC-Sr04 to be exact, along with a buzzer to make a parking sensor for the car. But here's the issue, the prior code worked perfectly for the simple version, but now that I am adding the code that I created for the parking sensor, nothing works anymore. As you can assume, the power and components are fine and everything still powers up, but when trying to actually make the car move with the application nothing happens.
I am kind of stumped on this one currently, as I don't know if its something obvious that I am missing or if I have messed up parts of the code or if a part of the old code is clashing with the new code maybe, which is why I could use some help if anyone spots anything that sticks out that could be causing this.
But just a rundown on the car itself as I don't have a schematic, I have a 12v supply which connects to two switches, 1 switch powers the Arduino board plugging directly into the socket, while the other powers the 12v of 1 of 2 of the L298N drivers, which then just feeds into the other driver. I have the 5v of the driver connecting to the Vin of the Arduino board, followed by the 5v from the Arduino board connecting to a breadboard which supplies power to the Bluetooth module, Ultrasonic sensor and the LED's just so they aren't connected directly to the supply. The input and enable pins from both L298N drivers connect up to the digital pins from 2-13, followed by the last 2 digital pins 0 and 1 housing the Bluetooth modules TXD and RXD. Now with all of the digital pins being used, I am having to use the Analog in on the Arduino for the LED's which is fine, along with the Buzzer and the ultrasonic sensors echo and trig pins. I am not 100% sure if I have my code correct for Analog which could be causing the issue? Although I am still getting used to Arduino so I'm kind of learning as I go.
I will leave my code below in parts just so it is easy to read. Id appreciate anyone's help with this as not being able to figure out the issue is driving me crazy haha
Just to mention that the below code is just the new code that will be added to the above code, I will show this added to the old code in another section.
I am kind of stumped on this one currently, as I don't know if its something obvious that I am missing or if I have messed up parts of the code or if a part of the old code is clashing with the new code maybe, which is why I could use some help if anyone spots anything that sticks out that could be causing this.
But just a rundown on the car itself as I don't have a schematic, I have a 12v supply which connects to two switches, 1 switch powers the Arduino board plugging directly into the socket, while the other powers the 12v of 1 of 2 of the L298N drivers, which then just feeds into the other driver. I have the 5v of the driver connecting to the Vin of the Arduino board, followed by the 5v from the Arduino board connecting to a breadboard which supplies power to the Bluetooth module, Ultrasonic sensor and the LED's just so they aren't connected directly to the supply. The input and enable pins from both L298N drivers connect up to the digital pins from 2-13, followed by the last 2 digital pins 0 and 1 housing the Bluetooth modules TXD and RXD. Now with all of the digital pins being used, I am having to use the Analog in on the Arduino for the LED's which is fine, along with the Buzzer and the ultrasonic sensors echo and trig pins. I am not 100% sure if I have my code correct for Analog which could be causing the issue? Although I am still getting used to Arduino so I'm kind of learning as I go.
I will leave my code below in parts just so it is easy to read. Id appreciate anyone's help with this as not being able to figure out the issue is driving me crazy haha
Fully working code prior to adding the new code:
#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;
}
}
}
New code which is to be implemented for the Ultrasonic Sensor:
#define trigPin A2 //Ultrasound pin A2 for Arduino Uno;
#define echoPin A3 //Ultrasound pin A3 for Arduino Uno;
#define buzPin A4
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, OUTPUT); //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);
}
Final set of code is both the old and new code together:
#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 buzPin A4
#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;
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, OUTPUT); //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(){
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);
}
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;
}
}
}