Arduino: uso Serial y Software Serial con módulo bluetooth

Mi propósito es usar Arduino para establecer la comunicación entre un PC y un dispositivo Android usando un módulo bluetooth HC-05.

Utilizo la comunicación USB entre el PC y el Arduino (Serial Monitor) y un SoftwareSerial para conectar al HC-05.

Mi problema es que la comunicación funciona bien de BT a la PC, pero no funciona como se esperaba en la otra forma. Al enviar desde el PC a BT todos los caracteres enviados son recibidos por el dispositivo BT solamente cuando cierro el Monitor Serial en el PC o cuando reinicio el Arduino.

He excluido un problema con el módulo BT o la aplicación de Android, porque si en Arduino implemento un código "ECHO" (escribe en Android y el envío en Android) todo funciona bien.

Con el código Arduino publicado abajo el comportamiento esperado es: Arduino reset-> Hola palabra enviada, Serial monitor abierto-> nada sucede, carácter escrito en el monitor en serie-> carácter recibido en BT, carácter escrito en BT-> carácter recibido en Serial Monitor , Monitor serie cerrado-> no pasa nada.

El comportamiento real es: Arduino reset-> Hola palabra enviada, Serial monitor abierto-> 2 Hola palabra en BT y 1 ("buenas noches") en la PC, carácter escrito en el monitor serie-> nada, carácter escrito en BT-> carácter recibido En el monitor en serie, el monitor en serie cerrado-> carácter (s) anterior (es) en el monitor en serie recibido + Hello Word.

¿Como puedo solucionar este problema?

Código:

#include <SoftwareSerial.h> SoftwareSerial mySerial(2, 3); // RX, TX int a=0; char c; char d; void setup() { Serial.begin(9600); Serial.println("Goodnight moon!"); mySerial.begin(9600); mySerial.println("Hello, world?"); } void loop() { delay(10); if (Serial.available()) { c=Serial.read(); delay(10); Serial.write(c); } delay(10); if (mySerial.available()) { d=mySerial.read(); delay(10); mySerial.write(d); } } 

Este código funciona para mí en un Arduino Mini Pro (debe ser el mismo que UNO) con un HC-05. Tengo el HC-05 emparejado con mi computadora portátil. Utilizando HyperTerminal en el puerto COM asociado con el HC-05 y la consola serie Arduino, puedo enviar mensajes bidireccionalmente. Las sentencias Serial.println aparecen en la ventana de Hyperterminal como deberían.

 #include <SoftwareSerial.h> #define rxPin 8 #define txPin 7 SoftwareSerial mySerial(rxPin, txPin); // RX, TX char myChar ; void setup() { Serial.begin(9600); Serial.println("Goodnight moon!"); mySerial.begin(9600); mySerial.println("Hello, world?"); } void loop(){ while(mySerial.available()){ myChar = mySerial.read(); Serial.print(myChar); } while(Serial.available()){ myChar = Serial.read(); mySerial.print(myChar); } } 

He implementado una comunicación serial entre Arduino Uno y PC y este era mi código, espero que pueda ayudar:

 int data; char character; int start_flag = 0; void setup() { Serial.begin(921600); pinMode(2, OUTPUT); } void loop() { if(Serial.available() > 0){ character = (char) Serial.read(); if(character == 's') { start_flag = 1; } if(character == 't') { start_flag = 0; } } if (start_flag == 1) { Serial.print(data); //data that was acquired by internal ADC } } 

Podrías intentar esto . Se trata del código más simple que puedes usar al probar la comunicación Arduino bluetooth <-> C #. Nota: el código se ha probado conectando el PIN1 (TX) <-> MÓDULO RX, PIN2 (RX) <-> MÓDULO TX y dividiendo el PIN1 (TX) 5V a 2,5V antes de alimentarlo al módulo.

Espero que esto ayude a todos los que están intentando esto!

Utilice esta configuración en serie. Con este código puedo recibir y enviar la fecha al bluetooth del monitor serial

 void setup(){ Serial.begin(9600); // Begin the serial monitor at 9600bps bluetooth.begin(115200); // The Bluetooth Mate defaults to 115200bps bluetooth.print("$"); // Print three times individually bluetooth.print("$"); bluetooth.print("$"); // Enter command mode delay(100); // Short delay, wait for the Mate to send back CMD bluetooth.println("U,9600,N"); // Temporarily Change the baudrate to 9600, no parity // 115200 can be too fast at times for NewSoftSerial to relay the data reliably bluetooth.begin(9600); // Start bluetooth serial at 9600 pinMode(led, OUTPUT); pinMode(buttonPin1, INPUT); pinMode(buttonPin2, INPUT); } 

Para obtener más información, visite http://www.circuitmagic.com/arduino/arduino-and-bluetooth-hc-06-to-control-the-led-with-android-device/

Recomiendo usar esta aplicación para realizar pruebas:

https://play.google.com/store/apps/details?id=com.vagoscorp.virtualterminal

Le permite ver y enviar bytes como bytes (número de 0b00000000 a 0b11111111 (0 a 255 en decimal)) para que pueda hacer un simple firmware de eco para probar si su velocidad de transmisión es correcta y con ese trabajo, comience a enviar comandos para encender / Apagado algunos LEDs

Este es un ejemplo de código de eco:

 char dato = 0; void setup() { Serial.begin(9600);//9600 is the default baudrate of the HC-05 (you can change it by AT commands, google it if you want) //pinMode(13, OUTPUT); //enable this pin if you want to use de LED idea //digitalWrite(13, HIGH); } ////////////////////////////////////////////////////////////////////////// void serialEvent() { //if you have received serial data while (Serial.available() > 0) { char dato = (byte)Serial.read();//save the byte Serial.write(dato);//send the just received byte (echo) } } /////////////////////////////////////////////////////////////////////////// void loop() { } 

Espero que esto te ayude

Tenía el mismo problema, usted tiene que ver el módulo BT como 2 velocidades de baud diferentes en el lado cableado y el lado de la radio. El lado de la radio se ajusta por lo que usted conecta a través de la masilla, el lado atado con alambre se programa vía los comandos de AT. El valor predeterminado de HC-05 es 38400.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.