2

I am making an RC car on Arduino Uno. I have connected an L298N motor driver to an Arduino Uno to control 2 DC motors. I also connected an HC-06 to the Uno to receive commands from an Android smartphone. Everything is working fine. But if a connection is lost (because of low battery or disconnected on Android application), when the RC car is moving it is not stopping. It stops only when there is connection and "s"(stop) command is received via Bluetooth.

int in1 = 4;
int in2 = 5;
int in3 = 6;
int in4 = 7;
void setup() {
 Serial.begin(9600);
 pinMode (in1, OUTPUT);
 pinMode (in2, OUTPUT);
 pinMode (in3, OUTPUT);
 pinMode (in4, OUTPUT);
}
void loop() {
 if (Serial.available()) {
 int command = Serial.read();
 move(command);
 }
}
void move(int command) {
 if (command == 'f') forward();
 else if (command == 'b') backward();
 else if (command == 'l') left();
 else if (command == 'L') leftback();
 else if (command == 'r') right();
 else if (command == 'R') rightback();
 else if (command == 's') stop();
}

Now what I want is to identify whether there is connection or it is lost. For example:

if(Serial.connectionLost()) stop();

Is there such a function to identify the connection state? If not, is it possible to implement this function in another way?

dda
1,5951 gold badge12 silver badges17 bronze badges
asked Jan 18, 2017 at 21:08

2 Answers 2

1

My first one or couple of HC-06es brought its LED signal out to a pin on the base board, labeled "STATE" on mine. I tested the LED state on every loop and if it was changing regularly, took that to indicate whether it was waiting for a connection.

Later modules no longer bring out the LED signal but it is available on module's edge-pin 24, according to a (now 6yo) datasheet.

Location of LED edge-pin

By cutting the plastic sleeve and bringing out the signal to the baseboard again, you use it to monitor the connection.

LED signal detail

answered Feb 18, 2017 at 17:06
0

Two possible ways I see:

  • Connect the HC-06 LED anode (or cathode, depending on how it's driven) to an Arduino input pin. Since you can tell from the blink frequency if the module is paired with your phone or not, you can use that (through interrupts maybe) as a means to know if you're still connected to your phone.
  • Find a way to configure the android app (or write your own app) to either regularly ping your Arduino or to respond to ping requests from the Arduino. If the Arduino fails to get a ping request (in the first case) or a ping response (in the second case) after some pre-agreed interval, it decides the connection has been broken and halts the RC car.

Second way is less messy but may require some android programming skills on your part. I remember coming across an app in the Play Store that sends '#' constantly even when idle, with your own characters in between. That would work as well as a ping, if you could find something similar, and the only programming you'd need to do would be on the Arduino's side.

answered Jan 18, 2017 at 21:47
1
  • 1
    The second option is also often known as "Keep alive". Send a char from the Arduino to the Android App, and the Android App send a knowledge back, Example : Arduino send "Alive" -> Android. Android reply "Yes" to the Arduino. Commented Aug 18, 2017 at 15:36

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.