Control de leds con bluetooth

Hola, disculpen tenga una duda sobre el modulo bluetooth, mi maestro me encargo un proyecto de implementar el modulo bluetooth en una casa domotica con 5 leds donde se establesca la siguiente condicion:

Bluetooth Interruptor
1 0 = 1 manda a encender el led
0 1 = 1 manda a apagar el led
0 0 = 0 manda a apagar el led
1 1 = 1 apaga el led

cabe destacar que esto es con 5 leds, por lo cual la condicion se tiene que hacer con todos los leds.

hasta ahora yo eh logrado hacer esta condicion con un solo led, el problema inicia cuando empiezo a tomar en cuenta el segundo led, es decir mando a encender el primer led y enciende, mando a encender el segundo led y encende tambien los puedo apagar desde la aplicacion sin ningun problema
y las condiciones se pueden hacer con cada led pero individualmente, y yo quiero hacerlo pero con todos los leds a la vez, nose si me explico?, espero y me puedan ayudar, aqui les dejo mi programa.

centro representa al interruptor

int estado =0;
int centro1 = 8;
int centro2 = 9;
int centro3 = 10;
int centro4 = 11;
int centro5 = 12;
int led1 = 2;
int led2 = 3;
int led3 = 4;
int led4 = 5;
int led5 = 6;
int valor;
int valor1;
int aux_1 =0;
int aux_2 =0;
int aux_3 =0;
int aux_4 =0;
int aux_5 =0;
void setup(){
  Serial.begin(9600);
  delay(1000);
  pinMode(led1,OUTPUT);
  pinMode(led2,OUTPUT);
  pinMode(led3,OUTPUT);
  pinMode(led4,OUTPUT);
  pinMode(led5,OUTPUT); 
  pinMode(centro1,INPUT);
  pinMode(centro2,INPUT);
  pinMode(centro3,INPUT);
  pinMode(centro4,INPUT);
  pinMode(centro5,INPUT);
  
}

void loop(){
 if(Serial.available()>0){
 estado = Serial.read(); 
 
 }


 

//////////////////////////////////////////////// foco 1 


valor = digitalRead(centro1);
{
if( valor == LOW)
 {
 
 if (estado =='1'){
 if(aux_1 == 0){
 
   digitalWrite(led1,HIGH);
   aux_1 = 1;
  }
 }
 }
 else{
   digitalWrite(led1,LOW);
   aux_1 = 0;
  }
 
}
if(estado == '2'){
     digitalWrite(led1,LOW);
     aux_1 = 0;
}

/////////////segunda condicion del primer foco


valor1 = digitalRead(centro1);

if( valor1 ==HIGH)
 {
 
 if (estado =='2'){
 if(aux_1 == 0){
 
   digitalWrite(led1,HIGH);
   aux_1 = 1;
  }
 }
 
 else{
   digitalWrite(led1,LOW);
   aux_1 = 0;
  }
 } 


////////////foco2 
valor = digitalRead(centro2);
{
if( valor == LOW)
 {
 
 if (estado =='3'){
 if(aux_2 == 0){  
 
   digitalWrite(led2,HIGH);
   aux_2 = 1; 
  }
 }
 }
 else{
   digitalWrite(led2,LOW);
   aux_2 = 0;
  }
 
}
if(estado == '4'){
     digitalWrite(led2,LOW);
     aux_2 = 0;
}



/////////segunda condicion del segundo foco
valor1 = digitalRead(centro2);

if( valor1 ==HIGH)
 {
 
 if (estado =='4'){
 if(aux_2 == 0){
 
   digitalWrite(led2,HIGH);
   aux_2 = 1;
  }
 }
 
 else{
   digitalWrite(led2,LOW);
   aux_2 = 0;
  }
 }

Hola

La operación or exclusivo o xor (el operador es: ^), opera a nivel de bit y devuelve 1 si los bit a comparar son distintos, y cero si son ambos iguales, es decir, la tabla de verdad que pones al principio. Podríamos utilizar un solo byte para almacenar y trabajar simultaneamente hasta ocho bits, pero para evitar complicaciones, utilizaremos un byte completo por cada led, pulsador, y estado bluetooth actual, tomando sólo el bit de la derecha.

Por ejemplo:
pulsador bluetooth salida
00000001 ^ 00000000 = 00000001
00000001 ^ 00000001 = 00000000

Va un código de ejemplo. No he podido probar con bluetooth, pero con el monitor serie parece que funciona bien. Sencillamente se envían los dígitos 0-4 de las salidas a conmutar.

#define NUMLEDS 5

struct {
	int pinLed;
	int pinInterruptor;
	bool estadoBluetooth;
	} luz[NUMLEDS] = {
		{2, 8, false},
		{3, 9, false},
		{4, 10, false},
		{5, 11, false},
		{6, 12, false}
	};

	void setup()
	{
		Serial.begin(9600);
	}
	void loop()
	{
		if (Serial.available()) {
			byte valor = Serial.read() - '0';
			if (NUMLEDS > valor && valor >= 0)
				luz[valor].estadoBluetooth = !luz[valor].estadoBluetooth;
		}
		for (int i =0; i< NUMLEDS; i++) {
			digitalWrite(luz[i].pinLed, digitalRead(luz[i].pinInterruptor)^luz[i].estadoBluetooth);
		}
	}