Problema con mando a distancia y arduino due

Buenas tardes a todos. Lo primero decir que soy novato con mi arduino, pero leyendo y buscando, de momento, he conseguido ir avanzando en mi proyecto. El problema es que he llegado a un punto que no consigo avanzar, y sé que para los que entendeis será una tontería. Empiezo:
Mi proyecto es encender y apagar los equipos de música y ordenadores que tengo en casa. Para ello tengo un arduino due y tantos relés como equipos quiero controlar. El código lo tengo ya desarrollado, pero hay una función que no soy capaz de conseguir. De momento, en la prueba que tengo, con el 1 enciendo el amplificador, con el 2 enciendo el CD1, con el 3 enciendo la pletina, con el 4 enciendo el ecualizador y con el "stop" paro en el orden que me interesa y con un intervalo de un segundo y medio entre cada uno. Lo que no consigo hacer es que si pulso el 2 se encienda el CD1 y si vuelvo a pulsar el 2 se me apague el CD1. Es decir, con cada botón que pueda encender o apagar el equipo correspondiente.
El código que tengo es este:

/*
Control de sonido y ordenadores con control remoto
*/

#include <IRremote.h>

int RECV_PIN = 11;

int amplificadorPin = 23; // Pin al que se conecta el Amplificador
int cd1Pin = 25; // Pin al que se conecta el CD1
int pletinaPin = 27; // Pin al que se conecta la pletina
int ecualizadorPin = 29; // Pin al que se conecta el ecualizador

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Comenzar la recepción
pinMode(amplificadorPin, OUTPUT); // Establecer Pin 1 como salida
pinMode(cd1Pin, OUTPUT); // Establecer Pin 1 como salida
pinMode(pletinaPin, OUTPUT); // Establecer Pin 1 como salida
pinMode(ecualizadorPin, OUTPUT); // Establecer Pin 1 como salida
}

void loop() {
if (irrecv.decode(&results)) {

long int decCode = results.value;
Serial.println(decCode);
switch (results.value) {
case 0x40BF708F:
Serial.println("Amplificador");
digitalWrite(amplificadorPin, LOW); // Enciende el Amplificador
break;
case 0x40BFF00F:
Serial.println("CD1");
digitalWrite(cd1Pin, LOW); // Enciende el CD1
break;
case 0x40BF30CF:
Serial.println("Pletina");
digitalWrite(pletinaPin, LOW); // Enciende la Pletina
break;
case 0x40BF48B7:
Serial.println("Ecualizador");
digitalWrite(ecualizadorPin, LOW); // Enciende el Ecualizador
break;
case 0x40BFA05F:
Serial.println("Stop");
digitalWrite(amplificadorPin, HIGH); // Apaga el Amplificador
delay(1500); // Espera 1,5 segundos
digitalWrite(cd1Pin, HIGH); // Apaga el CD1
delay(1500); // Espera 1,5 segundos
digitalWrite(pletinaPin, HIGH); // Apaga la Pletina
delay(1500); // Espera 1,5 segundos
digitalWrite(ecualizadorPin, HIGH); // Apaga el Ecualizador
break;
default:
Serial.println("Waiting ...");
}

irrecv.resume();
}
}

Si me podéis ayudar os estaré eternamente agradecido :), porque llevo 1 mes buscando :astonished: y probando y no soy capaz. :cold_sweat:

Gracias y un saludo.

Una posible solucion:

/* 
Control de sonido y ordenadores con control remoto
*/ 
 
#include <IRremote.h> 
 
int RECV_PIN = 11; 
 
int amplificadorPin = 23;               // Pin al que se conecta el Amplificador 
int cd1Pin = 25;                        // Pin al que se conecta el CD1
int pletinaPin = 27;                    // Pin al que se conecta la pletina 
int ecualizadorPin = 29;                // Pin al que se conecta el ecualizador
 
IRrecv irrecv(RECV_PIN); 
 
decode_results results; 

bool  Estado_amplificadorPin = true;   // Para almacenar el estado de los pines
bool  Estado_cd1Pin = true;
bool  Estado_pletinaPin = true;
bool  Estado_ecualizadorPin = true;
 
void setup() 
{ 
  Serial.begin(9600); 
  irrecv.enableIRIn();                 // Comenzar la recepción
  pinMode(amplificadorPin, OUTPUT);    // Establecer Pin 1 como salida 
  pinMode(cd1Pin, OUTPUT);             // Establecer Pin 1 como salida 
  pinMode(pletinaPin, OUTPUT);         // Establecer Pin 1 como salida 
  pinMode(ecualizadorPin, OUTPUT);     // Establecer Pin 1 como salida 
} 
 
 
 
 
void loop() 
{ 
  if (irrecv.decode(&results)) 
  {  
    long int decCode = results.value; 
    Serial.println(decCode); 
    switch (results.value) 
    { 
       case 0x40BF708F: 
       Serial.println("Amplificador");
       Estado_amplificadorPin=!Estado_amplificadorPin;
       digitalWrite(amplificadorPin, Estado_amplificadorPin);// Enciende/Apaga el Amplificador
       break; 
       case 0x40BFF00F: 
       Serial.println("CD1"); 
       Estado_cd1Pin=!Estado_cd1Pin;
       digitalWrite(cd1Pin, Estado_cd1Pin);                  // Enciende/Apaga el CD1
       break; 
       case 0x40BF30CF: 
       Serial.println("Pletina"); 
       Estado_pletinaPin=!Estado_pletinaPin;
       digitalWrite(pletinaPin, Estado_pletinaPin);          // Enciende/Apaga la Pletina
       break; 
       case 0x40BF48B7: 
       Serial.println("Ecualizador"); 
       Estado_ecualizadorPin=!Estado_ecualizadorPin;
       digitalWrite(ecualizadorPin, Estado_ecualizadorPin);  // Enciende/Apaga el Ecualizador
       break;  
       case 0x40BFA05F: 
       Serial.println("Stop"); 
       Estado_amplificadorPin = false;   
       Estado_cd1Pin = false;
       Estado_pletinaPin = false;
       Estado_ecualizadorPin = false;
       digitalWrite(amplificadorPin, Estado_amplificadorPin);   // Apaga el Amplificador 
       delay(1500);                                             // Espera 1,5 segundos
       digitalWrite(cd1Pin, Estado_cd1Pin);                     // Apaga el CD1
       delay(1500);                                             // Espera 1,5 segundos
       digitalWrite(pletinaPin, Estado_pletinaPin);             // Apaga la Pletina
       delay(1500);                                             // Espera 1,5 segundos
       digitalWrite(ecualizadorPin, Estado_ecualizadorPin);     // Apaga el Ecualizador 
       break;  
       default: 
       Serial.println("Waiting ..."); 
    }     
    irrecv.resume();    
  } 
}

Efectivamente Marcial, muchísimas gracias. Probado y funcionando a la primera. Ya apago y enciendo independientemente cada equipo y apago todo con otro. Incluso me he dado cuenta que en el último caso, si cambio el valor de false a true, en vez de apagar todo en el orden establecido, puedo encender todo igualmente en un orden. Me ha gustado también esa idea.
Ahora a desarrollar el proyecto completo con todos los equipos.
De nuevo muchas gracias.

Como que muchas gracias !!!!!! Son 50$ y la cama jajajaja
Me alegro que te funcione correctamente.