Problema con varios boolean (SOLUCIONADO)

char cadena[5]; byte contador=0;

boolean modo1=true; boolean modo01=false; boolean modo2=true; boolean modo02=false; boolean modo3=true; boolean modo03=false;

char usuario[5]={3,3,3,3};

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

void loop() {

///////////////////////////////////////////////////////////////////////////////////////////////// // COMUNICACION /////////////////////////////////////////////////////////////////////////////////////////////////

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

///////////////////////////////////////////////////////////////////////////////////////////////// // MODO1 /////////////////////////////////////////////////////////////////////////////////////////////////

if (cadena[0]=='P'){modo1=true;}

if (modo1==true) {

if(cadena[0]-48==usuario[0]&&cadena[1]-48==usuario[1]&&cadena[2]-48==usuario[2]&&cadena[3]-48==usuario[3]) { modo01 = !modo01; digitalWrite(13, modo01); } }

///////////////////////////////////////////////////////////////////////////////////////////////// // MODO2 /////////////////////////////////////////////////////////////////////////////////////////////////

if (cadena[0]=='N'){modo2=true;}

if(modo2==true) { if(cadena[0]-48==usuario[0]&&cadena[1]-48==usuario[1]&&cadena[2]-48==usuario[2]&&cadena[3]-48==usuario[3]) { modo02=!modo02; digitalWrite(7,modo02); } } ///////////////////////////////////////////////////////////////////////////////////////////////// // MODO3 /////////////////////////////////////////////////////////////////////////////////////////////////

if (cadena[0]=='Y'){modo3=true;}

if (modo3==true) { if(cadena[0]-48==usuario[0]&&cadena[1]-48==usuario[1]&&cadena[2]-48==usuario[2]&&cadena[3]-48==usuario[3]) { modo03=!modo03; digitalWrite(6,modo03); } } ///////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////

}//serial

}//void

-Recibe P, después recibe código y activa/desactiva led del pin 13 -Recibe N, después recibe código y activa/desactiva led del pin 7 -Recibe Y, después recibe código y activa/desactiva led del pin 6

Eso es lo que debería de hacer. Lo que hace es activar/desactivar todos los leds sea el modo que sea.

¿Alguna solución? Gracias de antemano por vuestra atención.

Perdona, pues ahora mismo no puedo mirar tu código más a fondo, pero echo de menos que después de entrar en alguno de los modos, desactives la bandera modo porque creo que si no te va a volver a entrar en su if en el siguiente ciclo. O bien if (cadena[0]=='P'){modo1=true;} else {modo1=false;}

O bien if (modo1==true) {

if(cadena[0]-48==usuario[0]&&cadena[1]-48==usuario[1]&&cadena[2]-48==usuario[2]&&cadena[3]-48==usuario[3]) { modo01 = !modo01; digitalWrite(13, modo01); } ** modo1=false;** }

EDITO: Me he dado cuenta de que, además, has definido modo1-modo3 como true, por lo que en cuanto envíes algo al serial, )va a ejecutar el código de los tres if (modo==true) REQUETEEDITO: En las líneas if(cadena[0]-48==usuario[0]&&cadena[1]-48==usuario[1]&&cadena[2]-48==usuario[2]&&cadena[3]-48==usuario[3]) ¿No deberías empezar a comparar a partir de cadena[1], ya que cadena[0] es el modo? También deberías aumentar el tamaño de cadena, ya que si envías 1 bit de comando + 4 de código + \n del serial, salen 6 bytes.

Hola @noter. Muchas gracias por tu interés, de nuevo. Lo he resuelto de esta manera:

if (modo1==true) {

if(cadena[0]-48==usuario[0]&&cadena[1]-48==usuario[1]&&cadena[2]-48==usuario[2]&&cadena[3]-48==usuario[3]) { modo01 = !modo01; digitalWrite(13, modo01); modo1=false; }

}

...es decir, saliendo de modo después de apagar/encender el led.

De nuevo muchas gracias noter, un saludo! +1 (¿Se puede mover el post a Software?)