MrJacky:
He estado modificando el código, de manera que pueda iniciar el bluetooth en 3 modos diferentes desde la consola serial.Teniendo en cuenta que al enviar los comandos AT debemos enviar el NL y CR, el sketch reconoce los comando de la misma forma.
Los comandos admitidos son (en minusculas):
bt at: inicia el MC-05 en modo AT Mini
bt atf: inicia el MC-05 en modo AT Full
bt on: inicia el MC-05 en modo Normal
bt off: apaga el modulo MC-05Ademas de estos comandos, he conseguido que al estar en modo AT, dispongamos de todos los comandos, dependiendo del modo estarán disponibles o no lo estarán.
por ejemplo, despues de activar el modo at full, puedo lanzar cualquier comando AT
at+name
at+pswd
etc etcNOTA: Sin embargo, en modo at mini no devolverá el nombre al usar at+name
#include <SoftwareSerial.h>
#define BT_RT 10
#define BT_TX 11
#define BTVCC 12
#define BTKEY 13
SoftwareSerial Bluetooth(BT_TX, BT_RT); // RX, TX
//Declaracion de variables
char inChar;
String string="";
int modoAT=0;
void setup() {
Serial.begin(9600);
}
void loop(){
if (Serial.available()){
inChar = Serial.read();
if(inChar=='\n'){
Serial.print("Comando recibido: "); Serial.println(string);
if(string=="bt at\r"){ Serial.println("Iniciando Bluetooth modo AT Mini"); modoBT(1); } // Arranca el modulo MC-05 en modo AT Mini
else if(string=="bt atf\r"){ Serial.println("Iniciando Bluetooth modo AT Full"); modoBT(2); } // Arranca el modulo MC-05 en modo AT Full
else if(string=="bt on\r"){ Serial.println("Iniciando Bluetooth modo Normal"); modoBT(3); } // Arranca el modulo MC-05 en modo Normal
else if(string=="bt off\r"){ Serial.println("Apagando Bluetooth"); modoBT(0); } // Apaga el modulo MC-05 (modo off= consumo zero)
else if(string.startsWith("at")){
Bluetooth.write("AT"); // Inicia conversacion con bluetooth
for(int x=2;x<string.length();x++){ Bluetooth.write(string.charAt(x)); } // Escribe caracteres del comando AT
Bluetooth.write('\n'); // Finaliza conversacion con bluetooth
}
string=""; // Resetea el string (inicia la espera de nuevos comandos)
}
else {string+=inChar;}
}
if(modoAT==1){
if (Bluetooth.available()){ Serial.write(Bluetooth.read()); } // En modo AT envia de bluetooth a serial
}
}
void modoBT(int x){
modoAT=0; pinMode(BTVCC, LOW); pinMode(BTKEY, LOW); // Apaga el modulo HC-05
delay(500);
pinMode(BTVCC, OUTPUT); // Marca el PIN de alimentacion para el HC-05 como salida
if((x == 1)||(x == 2)){
modoAT=1;
pinMode(BTKEY, OUTPUT); // Marca el PIN del modo AT para el HC-05 como salida
digitalWrite(BTKEY, HIGH); // Activa el modo AT Full
}
delay (500) ; // Espera antes de encender el modulo
if(x == 0){ return; } // Mantiene apagado el modulo y vuelve al loop
Serial.println("Alimentando el modulo HC-05");
digitalWrite(BTVCC, HIGH); // Enciende el modulo
if(x == 1) {
delay(600); digitalWrite(BTKEY, LOW); // Cambia al modo AT Mini
Serial.println("Esperando comandos AT Mini:");
}
else if(x == 2){ Serial.println("Esperando comandos AT Full:"); }
Bluetooth.begin(38400);
}
creo que el código puede ser interesante y que alguien le de utilidad
Cordial saludo, esto a veces es un chicharron,,en mi caso compre el hc 05 y tan pronto lo conectaba parpadeaba rápidamente pero me dejaba entrar a comandos AT (sin hundir el botón, ni conectar el pin 34) pero cuando pedia AT+NAME no salía nada también podía entrar presionando el botoncito, un día lo tome de nuevo y no me dejaba entrar de ninguna manera y pensé que se había dañado el modulo aunque podía establecer una comunicación desde el celu con una apk., pero en el monitor serial no salía nada.
toda esta carreta, es porque deje presionado el botón por mas de 10 segundos y a partir de allí ya volvió a trabajar de nuevo con solo encenderlo y dejar presionado el botón hasta que parpadea despacio, lo que no volvió a dejar hacer es que con solo encenderlo se podían ingresar comandos AT, en un apartado leí que estos módulos tienen modo AT1 y AT2 , supongo que los modos mini y full son para esto // pero el compañero lo hace desde el programa, como seria para hacerlos desde el monitor serial??