//////////////////////////////////
// DEFINIR ON/OFF
//////////////////////////////////
#define ON 0 //Estado del boton pulsado - ON
#define OFF 1 //Estado del boton sin pulsar - OFF
#define RELAY_ON LOW //Estado Relay conectando Common con NO. Para Relay estado solido es a la inversa
#define RELAY_OFF HIGH //Estado Relay conectando Common con NC
//////////////////////////////////
// DEFINIR RELAY
//////////////////////////////////
const int R1 = 2 ; //NC - Reflectores led
const int R2 = 3 ; //NC - Spot
const int R3 = 4 ; //NC - Spot
const int R4 = 5 ; //NO - Luz Party
const int R5 = 6 ; //NO - Luz Party
const int R6 = 7 ; //NO - Luz Party
const int R7 = 8 ; //Play/Pause ó Maquina de Humo
const int R8 = 9 ; //Next
//////////////////////////////////
// DEFINIR BOTON
//////////////////////////////////
#define BOTON_A 10
#define BOTON_B 11
#define BOTON_C 12
#define BOTON_D 13
int estadoBotonA = 0;
int estadoBotonB = 0;
int estadoBotonC = 0;
int estadoBotonD = 0;
#define DEBOUNCE_DELAY 300 // Tiempo de espera en milisegundos para el debounce
unsigned long lastDebounceTime = 0; // Último tiempo registrado
bool lastButtonState = HIGH; // Estado anterior del botón, inicializado en HIGH debido a la resistencia pull-up
void setup()
{
Serial.begin(9600);
pinMode(BOTON_A, INPUT_PULLUP);
pinMode(BOTON_B, INPUT_PULLUP);
pinMode(BOTON_C, INPUT_PULLUP);
pinMode(BOTON_D, INPUT_PULLUP);
pinMode(R1, OUTPUT) ;
pinMode(R2, OUTPUT) ;
pinMode(R3, OUTPUT) ;
pinMode(R4, OUTPUT) ;
pinMode(R5, OUTPUT) ;
pinMode(R6, OUTPUT) ;
pinMode(R7, OUTPUT) ;
pinMode(R8, OUTPUT) ;
digitalWrite(R1, RELAY_OFF);
digitalWrite(R2, RELAY_OFF);
digitalWrite(R3, RELAY_OFF);
digitalWrite(R4, RELAY_OFF);
digitalWrite(R5, RELAY_OFF);
digitalWrite(R6, RELAY_OFF);
digitalWrite(R7, RELAY_OFF);
digitalWrite(R8, RELAY_OFF);
}
void loop()
{
if (botonPulsado(BOTON_A))
{
estadoBotonA = !estadoBotonA;
Serial.println("\nestado Boton A: \n"+String(estadoBotonA));
};
if (estadoBotonA)
{
digitalWrite(R1, RELAY_ON);
} else
{
digitalWrite(R1, RELAY_OFF);
};
if (botonPulsado(BOTON_B))
{
estadoBotonB = !estadoBotonB;
Serial.println("\nestado Boton B: \n"+String(estadoBotonB));
};
if (estadoBotonB)
{
digitalWrite(R2, RELAY_ON);
} else
{
digitalWrite(R2, RELAY_OFF);
};
if (botonPulsado(BOTON_C))
{
estadoBotonC = !estadoBotonC;
Serial.println("\nestado Boton C: \n"+String(estadoBotonC));
};
if (estadoBotonC)
{
digitalWrite(R3, RELAY_ON);
} else
{
digitalWrite(R3, RELAY_OFF);
};
if (botonPulsado(BOTON_D))
{
estadoBotonD = !estadoBotonD;
Serial.println("\nestado Boton D: \n"+String(estadoBotonD));
};
if (estadoBotonD)
{
digitalWrite(R4, RELAY_ON);
} else
{
digitalWrite(R4, RELAY_OFF);
};
}
////////////////////////////////////////
// BOTON PULSADO?
////////////////////////////////////////
bool botonPulsado(int pinBoton)
{
// Obtiene el tiempo actual
unsigned long currentMillis = millis();
//static bool lastButtonState = HIGH; // Estado anterior del botón, inicializado en HIGH debido a la resistencia pull-up
bool currentButtonState = digitalRead(pinBoton); // Estado actual del botón
// Comprueba si el botón ha cambiado de estado y está pulsado
if (currentButtonState != lastButtonState && currentMillis - lastDebounceTime > DEBOUNCE_DELAY) // #define ON 0 - LOW es boton pulsado
{
// Actualiza el tiempo del último cambio
lastDebounceTime = currentMillis;
// Actualiza el estado anterior del botón
lastButtonState = currentButtonState;
// Si el botón está presionado, devuelve verdadero
if (currentButtonState == ON)
{
return true;
}
}
return false;
}
////////////////////////////////////////
// BOTON PULSADO?
////////////////////////////////////////
void pushParty()
{
//Apagar luces blancas
Serial.println("\nAPAGADO - Luces Blancas\n");
digitalWrite(R1, RELAY_ON);
digitalWrite(R2, RELAY_ON);
digitalWrite(R3, RELAY_ON);
/*USAR en V.HUMO
//Prender musica
//digitalWrite(R8, RELAY_ON);
delay(200);
//digitalWrite(R8, RELAY_OFF);
*/
//Prender musica
digitalWrite(R8, RELAY_ON);
delay(200);
digitalWrite(R8, RELAY_OFF);
Serial.println("\nNEXT - Musica\n");
//Retraso de 1 Segundo
delay(1000);
//Prender luces de colores
Serial.println("\nPRENDIDO - Luces Color\n");
digitalWrite(R4, RELAY_ON);
digitalWrite(R5, RELAY_ON);
digitalWrite(R6, RELAY_ON);
delay(40000); //40 segundos
//Apagar luces de colores
Serial.println("\nAPAGADO - Luces Color\n");
digitalWrite(R4, RELAY_OFF);
digitalWrite(R5, RELAY_OFF);
digitalWrite(R6, RELAY_OFF);
//Prender luces blancas
Serial.println("\nPRENDIDO - Luces Blancas\n");
digitalWrite(R1, RELAY_OFF);
digitalWrite(R2, RELAY_OFF);
digitalWrite(R3, RELAY_OFF);
//Apagar musica
digitalWrite(R7, RELAY_ON); //Pulsa boton
delay(200);
digitalWrite(R7, RELAY_OFF);//Suelta boton
Serial.println("\nPAUSA - Musica\n");
}