[SOLUCIONADO] HC-05 Bluetooth - Lectura siempre -1
buenos días,
actualmente estoy probando un módulo bluetooth basando en un código de internet en el cual dependiendo de la cadena enviada ( toda ella almacenada en un array de char ) habilita el estado de 3 diferentes led.
el problema reside en que siempre que leo cualquier carácter mandado por parte del bluetooth, me retorna -1 (con independencia de que botón pulse ). adjunto código:
¿sabéis que puede deberse esto? necesito hacer alguna configuración en mi módulo ( mediante comandos @ ) para que pueda leer correctamente los datos.
muchas gracias por todo!
un saludo.
**edit: el seguimientos de este post será partir del comentario #4 ya que cambiado el código y el circuito por completo.
**edit [solucionado] : comentario #7
actualmente estoy probando un módulo bluetooth basando en un código de internet en el cual dependiendo de la cadena enviada ( toda ella almacenada en un array de char ) habilita el estado de 3 diferentes led.
el problema reside en que siempre que leo cualquier carácter mandado por parte del bluetooth, me retorna -1 (con independencia de que botón pulse ). adjunto código:
code: [select]
#include <softwareserial.h> //librería que permite establecer comunicación serie en otros pins
//aquí conectamos los pins rxd,tdx del módulo bluetooth.
softwareserial bt(10,11); //10 rx, 11 tx.
int green=4;
int yellow=5;
int red=6;
char cadena[255]; //creamos un array de caracteres de 256 cposiciones
int i=0; //tamaño actual del array
int estado = 0;
void setup()
{
bt.begin(9600);
serial.begin(9600);
pinmode(green,output);
pinmode(yellow,output);
pinmode(red,output);
}
void loop()
{
//cuando haya datos disponibles
if(bt.available())
{
serial.println(estado);
/* codigo debug */
if(estado == 0)
{
digitalwrite(green,high);
serial.println("encendido");
estado = 1;
} else {
digitalwrite(green,low);
serial.println("encendido");
estado = 0;
}
/* fin codigo debug */
char dato=bt.read(); //guarda los datos carácter carácter en la variable "dato"
cadena[i++]=dato; //vamos colocando cada carácter recibido en el array "cadena"
/* codigo debug */
serial.println("se ha pulsado una tecla");
serial.print((char)bt.read());
/* fin codigo debug */
//cuando reciba una nueva línea (al pulsar enter en la app) entra en la función
if(dato=='\n')
{
serial.print(cadena); //visualizamos el comando recibido en el monitor serial
//green led
if(strstr(cadena,"green on")!=0)
{
digitalwrite(green,high);
}
if(strstr(cadena,"green off")!=0)
{
digitalwrite(green,low);
}
//yellow led
if(strstr(cadena,"yellow on")!=0)
{
digitalwrite(yellow,high);
}
if(strstr(cadena,"yellow off")!=0)
{
digitalwrite(yellow,low);
}
//red led
if(strstr(cadena,"red on")!=0)
{
digitalwrite(red,high);
}
if(strstr(cadena,"red off")!=0)
{
digitalwrite(red,low);
}
//all on
if(strstr(cadena,"on all")!=0)
{
digitalwrite(green,high);
digitalwrite(yellow,high);
digitalwrite(red,high);
}
//all off
if(strstr(cadena,"off all")!=0)
{
digitalwrite(green,low);
digitalwrite(yellow,low);
digitalwrite(red,low);
}
bt.write("\r"); //enviamos un retorno de carro de la app. la app ya crea una línea nueva
clean(); //ejecutamos la función clean() para limpiar el array
}
}
}
//limpia el array
void clean()
{
(int cl=0; cl<=i; cl++)
{
cadena[cl]=0;
}
i=0;
}
¿sabéis que puede deberse esto? necesito hacer alguna configuración en mi módulo ( mediante comandos @ ) para que pueda leer correctamente los datos.
muchas gracias por todo!
un saludo.
**edit: el seguimientos de este post será partir del comentario #4 ya que cambiado el código y el circuito por completo.
**edit [solucionado] : comentario #7
errores
estado se define como global con valor = 0;
y nadie lo cambia de modo que siempre sera high y un encendido por cierto, da igual estado = 0 que 1 siempre diras encendido.
todos tus
consultan por la negación o sea, entiendo que green on debe poner led green en high y acá dice lo opuesto.
entonces debe ser simplemente
y finalmente cuando tienes estos problemas usa algunos trucos como poner por ejemplo algo que "te muestre" que va leyendo el arduino del bt. solo un serial.print(dato); ayuda..
luego de reconocer el '\n' le pones un serial.println(); y listo.
code: [select]
serial.println(estado);
/* codigo debug */
if(estado == 0) {
digitalwrite(green,high);
serial.println("encendido");
estado = 1;
} else {
digitalwrite(green,low);
serial.println("encendido");
estado = 0;
}
estado se define como global con valor = 0;
y nadie lo cambia de modo que siempre sera high y un encendido por cierto, da igual estado = 0 que 1 siempre diras encendido.
todos tus
code: [select]
todos tus if(strstr(cadena,"green on")!=0)
{
digitalwrite(green,high);
}
consultan por la negación o sea, entiendo que green on debe poner led green en high y acá dice lo opuesto.
entonces debe ser simplemente
code: [select]
if(strstr(cadena,"green on"))
{
digitalwrite(green,high);
}
y finalmente cuando tienes estos problemas usa algunos trucos como poner por ejemplo algo que "te muestre" que va leyendo el arduino del bt. solo un serial.print(dato); ayuda..
luego de reconocer el '\n' le pones un serial.println(); y listo.
Arduino Forum > International > Español (Moderators: surbyte, Hector_A) > [SOLUCIONADO] HC-05 Bluetooth - Lectura siempre -1
arduino
Comments
Post a Comment