HC 05 + Leonardo.

Hola a todos, soy nuevo en el mundo de Arduino, y voy a realizar mi primer proyecto con este, pero tengo un pequeño problema con el Modulo Bluetooth HC 05 hasta donde tengo entendido las conexiones con el Leonardo son
HC Leonardo
EN(o Key) 3.3 V
RXD TX1->1
TXD RX1<-0
GND GND (POWER)
VCC 5V

y en la programación no se como va, ya que de algo que estuve leyendo es que el Arduino Leonardo no necesita incluir la librería Software serial, por lo que he usado esta programación.

void setup() {
  // put your setup code here, to run once:
Serial1.begin(38400);
Serial.begin(38400);
}

void loop() {
  // put your main code here, to run repeatedly: 
  if(Serial1.available())
  {
    byte a=Serial1.read();
    Serial.write(a);
  }
  if(Serial.available())
  {
    byte a=Serial.read();
    Serial1.write(a);
  }
}

No se que más hacer, si me pudieran ayudar estaría eternamente agradecido;
PD: ¿Tengo una duda puedo implementar el arduino y el modulo a otro circuito y enviar datos del circuito(Como que un led se encendio) a un android? ¿y que desde Android se genere alguna acción?.
¿Que tendría que hacer?.

GRACIAS.

Hola

Bienvenido

Ese código que nos muestras creo que vale para un arduino mega o un due que tienen dos puertos serial, el arduino leonardo solo tiene un puerto serial( pin 0 y pin 1), pero puedes emular otro puerto serial con Softwareserial.h es una librería que emula un puerto serial y sus funciones son practicamente las mismas que el Serial nativo.

Si quieres mandar los comandos directamente a tu HC, para probarlo, puedes hacer lo siguiente:
con el arduino desconectado del usb, coloca un puente del reset a gnd, y conecta tu modulo HC rx a tx y tx a rx estos como ves van cruzados, conecta vcc a vcc y gnd a gnd, conecta el arduino a la pc y prueba mandando comandos a tu modulo hc por medio del la consola serial, en el monitor veras las respuestas.

Si aun necesitas usar otro Serial para hacer debug pues tienes que incluir a SoftwareSerial.h en tu sketch

--
Para resolver tus dudas tendrías que aclarar que tipo de circuito es y muchos detalles mas, pero si es solo si enciende un led es algo fácil, mandarlo a android supongo que también, peor como te digo necesitamos mas detalles.

¿Que quieres hacer?

El Arduino Leonardo si que tiene 2 puertos serial. Serial para el USB y Serial1 para los pins 0 y 1.

Serial: 0 (RX) and 1 (TX). Used to receive (RX) and transmit (TX) TTL serial data using the ATmega32U4 hardware serial capability. Note that on the Leonardo, the Serial class refers to USB (CDC) communication; for TTL serial on pins 0 and 1, use the Serial1 class.

Extraído de:

http://arduino.cc/en/Main/ArduinoBoardLeonardo

ehrja:
Hola

Bienvenido

Ese código que nos muestras creo que vale para un arduino mega o un due que tienen dos puertos serial, el arduino leonardo solo tiene un puerto serial( pin 0 y pin 1), pero puedes emular otro puerto serial con Softwareserial.h es una librería que emula un puerto serial y sus funciones son practicamente las mismas que el Serial nativo.

Es que lo que dice

carmeloco:
El Arduino Leonardo si que tiene 2 puertos serial. Serial para el USB y Serial1 para los pins 0 y 1.

Extraído de:

http://arduino.cc/en/Main/ArduinoBoardLeonardo

es cierto, el Leonardo tiene dos puertos seriales, por lo que no hay necesidad de simular.
Pero ya he probado con este código el HC y no recibo respuesta alguna, he usado el BlueTerm para comunicarme y nada.

char dato;
void setup()
{
pinMode(13,OUTPUT);

Serial1.begin(9600);

}

void loop()
{
while (Serial1.available()){
dato=Serial1.read(); 
switch(dato){ 
case 'w': 
{ digitalWrite(13,HIGH); Serial1.println("Led encendido"); break; }

case 'e': 
{ digitalWrite(13,LOW); Serial1.println("Led apagado"); break; } 

case 'r': 
{ digitalWrite(13,HIGH); delay(200);
digitalWrite(13,LOW);delay(200); 
digitalWrite(13,HIGH);delay(200);
digitalWrite(13,LOW);delay(200); 
digitalWrite(13,HIGH);delay(200); 
digitalWrite(13,LOW);delay(200);
digitalWrite(13,HIGH);delay(200);
digitalWrite(13,LOW);delay(200); 
digitalWrite(13,HIGH);delay(200); 
digitalWrite(13,LOW);delay(200); 
Serial1.println("Led intermitente"); break; } } }
}

También he probado llevar al HC 05 a comandos AT y comprobar que la velocidad de transmisión sean 9600 baudios pero no sé si mi código este bien, y no he usado el SoftwareSerial, por lo dicho antés.

void setup()

{

  Serial.begin(9600);
  Serial1.begin(38400);



Serial.println("Inicio de comandos AT:");


}



void loop() 
{
if(Serial.available())
Serial1.write(Serial.read());

if(Serial1.available())
Serial.write(Serial1.read());

}

¿La conexión Bluetooth la hace bien? Es decir, tu móvil se conecta al HC-05? (Led parpadeando: No conectado, led fijo: Conectado)

Cuando se conecta al modulo, desde mi móvil, el dispositivo tiende a parpadear más lento.

Quizá en el HC-05 sea así. Yo tengo un HC-06. Yo probaría a encender un Led después de Serial1.available() para comprobar que realmente recibe algo.

Si estás utilizando arduino Leonardo hay una cosa que creo no haber visto por ninguna parte en tu código y es practicamente obligatorio en un Leonardo para usar los puertos Serial y Serial1.

Serial.begin(9600);
while(!Serial);
Serial1.begin(38400);
while(!Serial1);

drarse:
¿La conexión Bluetooth la hace bien? Es decir, tu móvil se conecta al HC-05? (Led parpadeando: No conectado, led fijo: Conectado)

tengo un problema parecido cuando hago la conexion del movil con el modulo se conecta pero el led sigue parpadeando y segun tengo entendido el led debe quedar encendido :frowning:

uso arduino uno

bluethoot--- arduino uno

rx----------->tx
tx----------->rx
vcc--------->5V
gnd-------->gnd

Khazus:
Si estás utilizando arduino Leonardo hay una cosa que creo no haber visto por ninguna parte en tu código y es practicamente obligatorio en un Leonardo para usar los puertos Serial y Serial1.

Serial.begin(9600);

while(!Serial);
Serial1.begin(38400);
while(!Serial1);

Cual es la funcion del while?

tengo exactamente el mismo problema que el pana que inició el topic y yo no tengo esas lineas en mi codigo...

While ejecuta lo que se encuentre dentro de sus llaves mientras se cumpla la condición que engloba entre sus paréntesis. Normalmente, tras un while viene un bloque entre llaves que es el que se repite. De no existir las llaves, repite la siguiente instrucción, y si (como en este caso) se pone punto y coma tras el mismo, ejecuta una instrucción "vacía".
En este caso la traducción literal sería: "mientras no exista Serial estate parado".
Y creo que efectivamente, esa línea es necesaria para el leonardo, así que no es mala costumbre ponerla siempre tras un Serial.begin.