Go Down

Topic: Problema Serial con if.(SOLUCIONADO) (Read 466 times) previous topic - next topic

PascuaL

Mar 10, 2013, 03:56 pm Last Edit: Mar 11, 2013, 11:01 am by PascuaL Reason: 1
Este código almacena en un string la cadena de 4 que recibe por serie. Luego lo compara con las claves del programa y hace una cosa u otra...

Quote



char cadena[4];
byte contador=0;

char usuario[4]={'1','2','3','4'};
char cambio[4]={'1','1','1','1'};

void setup(){Serial.begin(9600);}

void loop()
{
 if(Serial.available())
  {
    while (Serial.available()>0)
    {
    delay(5);
    cadena[contador]=Serial.read();
    contador++;
    }
   
    contador=0;



      if (cadena[1]==cambio[1]&&cadena[2]==cambio[2]&&cadena[3]==cambio[3]&&cadena[4]==cambio[4])
      {
   
           Serial.print("Z");
       }



      if (cadena[1]==usuario[1]&&cadena[2]==usuario[2]&&cadena[3]==usuario[3]&&cadena[4]==usuario[4])
     {
       
           Serial.print("X");
     }


  }
}





El problema es que sólo hace caso si envío 1111, es decir, sólo hace caso al primer if.
Gracias por su atención.

curro92

Hola,
- Para almacenar "1111" necesitas reservar sitio para 5 caracteres, porque siempre se pone el null final ('\0')
char cadena[5], usuario[5], cambio[5]
Si no concretas el espacio,
char cambio[] = "1234";
el compilador tomará el espacio necesario (los 5 bytes).

- para señalar un lugar en la cadena, el índice empieza de 0, y en tu caso va hasta 3
if (cadena[0 ]== cambio[0]  etc.

Prueba haciendo los cambios. También podríamos hablar de enviar una cadena por serial, pero mejor después.



PascuaL

Qué cosas! El caso es que de haberme leído las referencias lo sabía, pero como funcionaba pues no había caído. Muy bien @curo92, hago cambios y comento como ha ido.
Gracias por tu interés!

PascuaL

Como bien dice @curro92 el error está en el tamaño. El primer if funciona porque son todo 1, pero el segundo no porque son números diferentes y no coinciden. La solución ha sido,efectivamente, poner los tamaños adecuados para que el comparador de cadenas afirme uno a uno todos los números.
Gracias @curro92, un saludo! +1


(¿Es posible trasladar este post a Software?)

Go Up