[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:

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
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

Popular posts from this blog

invalid use of void expresion in FlexiTimer2 library

error: a function-definition is not allowed here before '{' token

LED Strip Code