I've made a bluetooth car that is programmed with an Arduino Nano, and a Bluetooth Joystick that is programmed with an Arduino Uno. Both of the devices have an HC05 Bluetooth module. The car works perfectly, but every time the hc05 on both sides loose connection, the car will start moving by its own to the left repeatedly until connection is back. I don't want that to happen; I want the car to instantly stop the moment it loses connection.
Joystick code:
const int xPin = A1;
const int yPin = A0;
int xDir, yDir;
void setup () {
Serial.begin(38400);
}
void loop () {
xDir = analogRead(yPin);
yDir = analogRead(xPin);
Serial.write(xDir / 4); // converts data from 10-bit to 8-bit
Serial.write(yDir / 4);
delay(20);
}
Car code:
const int en1 = 3; // L293N pins
const int mc1_l = 4;
const int mc2_l = 5;
const int en2 = 6;
const int mc1_r = 7;
const int mc2_r = 8;
int xData;
int yData;
void setup() {
Serial.begin(38400);
for (int i = 3; i <= 8; i++) {
pinMode(i, OUTPUT);
}
brake();
delay(2000);
brake();
}
void loop() {
while (Serial.available() >= 2) {
xData = Serial.read();
delay(10);
yData = Serial.read();
}
xData *= 4; // gets data back to 10-bit
yData *= 4;
delay(20);
if (xData > 600) {
turnRight();
} else if (xData < 400) {
turnLeft();
} else if (yData > 600) {
forward();
} else if (yData < 400) {
backward();
} else {
brake();
}
}
void forward() {
digitalWrite(en1, LOW);
digitalWrite(mc1_r, HIGH);
digitalWrite(mc2_r, LOW);
digitalWrite(en1, HIGH);
digitalWrite(en2, LOW);
digitalWrite(mc1_l, HIGH);
digitalWrite(mc2_l, LOW);
digitalWrite(en2, HIGH);
}
void backward() {
digitalWrite(en1, LOW);
digitalWrite(mc1_r, LOW);
digitalWrite(mc2_r, HIGH);
digitalWrite(en1, HIGH);
digitalWrite(en2, LOW);
digitalWrite(mc1_l, LOW);
digitalWrite(mc2_l, HIGH);
digitalWrite(en2, HIGH);
}
void turnLeft() {
digitalWrite(en1, LOW);
digitalWrite(mc1_r, HIGH);
digitalWrite(mc2_r, LOW);
digitalWrite(en1, HIGH);
digitalWrite(en2, LOW);
digitalWrite(mc1_l, LOW);
digitalWrite(mc2_l, LOW);
digitalWrite(en2, HIGH);
}
void turnRight() {
digitalWrite(en1, LOW);
digitalWrite(mc1_r, LOW);
digitalWrite(mc2_r, LOW);
digitalWrite(en1, HIGH);
digitalWrite(en2, LOW);
digitalWrite(mc1_l, HIGH);
digitalWrite(mc2_l, LOW);
digitalWrite(en2, HIGH);
}
void brake() {
digitalWrite(en1, LOW);
digitalWrite(mc1_r, LOW);
digitalWrite(mc2_r, LOW);
digitalWrite(en1, HIGH);
digitalWrite(en2, LOW);
digitalWrite(mc1_l, LOW);
digitalWrite(mc2_l, LOW);
digitalWrite(en2, HIGH);
}