Pages: [1]   Go Down
Author Topic: Problema Serial con if.(SOLUCIONADO)  (Read 427 times)
0 Members and 1 Guest are viewing this topic.
Alicante
Offline Offline
Sr. Member
****
Karma: 2
Posts: 413
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
« Last Edit: March 11, 2013, 05:01:03 am by PascuaL » Logged

Euskadi
Offline Offline
God Member
*****
Karma: 16
Posts: 721
Arduinotarrak
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.


Logged

Alicante
Offline Offline
Sr. Member
****
Karma: 2
Posts: 413
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Alicante
Offline Offline
Sr. Member
****
Karma: 2
Posts: 413
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?)
Logged

Pages: [1]   Go Up
Jump to: