const unsigned long TIEMPO_REINICIO = 10000; // 10 segundos en milisegundos
unsigned long tiempoInicio = 0;
bool cicloActivo = false;
const int numLEDs = 5;
const int outPins[numLEDs] = {37, 40, 25, 42, 29}; // Pines RELE
const int numPulsadores = 5;
const int pinPulsadores[numPulsadores] = {16, 19, 4, 21, 8}; // Pines PULSADOR
const int pinBR = 53;
const int pinBI = 52;
const int pinRS = A5;
const int pinVe = A0;
const int pinAm = A1;
const int pinRo = A2;
const int pinIm = A3;
const int pinGi = A4;
bool estadoPulsadores[numPulsadores] = {false, false, false, false, false};
bool estadoBR = false;
bool estadoRS = false;
bool juegoResuelto = false;
bool volverJugar = false;
bool ejecutado = false;
const int retardo = 300;
void setup() {
// Configuración de los pines de los RELES
for (int i = 0; i < numLEDs; i++) {
pinMode(outPins[i], OUTPUT);
digitalWrite(outPins[i], LOW);
}
// Configuración de los pines de los PILOTO de color
pinMode(pinVe, OUTPUT);
pinMode(pinAm, OUTPUT);
pinMode(pinRo, OUTPUT);
pinMode(pinIm, OUTPUT);
pinMode(pinGi, OUTPUT);
digitalWrite(pinRo, HIGH);
digitalWrite(pinAm, LOW);
digitalWrite(pinVe, LOW);
digitalWrite(pinIm, LOW);
digitalWrite(pinGi, LOW);
// Configuración de los pines de los pulsadores
for (int i = 0; i < numPulsadores; i++) {
pinMode(pinPulsadores[i], INPUT_PULLUP);
}
pinMode(pinBR, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
// Control del botón de inicio
if (digitalRead(pinBR) == LOW && volverJugar == false) {
digitalWrite(pinRo, LOW);
digitalWrite(pinAm, HIGH);
cambiarEstadoLEDs(true);
estadoBR = true;
}
if (estadoBR == true){
for (int i = 0; i < numPulsadores; i++) {
if (digitalRead(pinPulsadores[i]) == LOW && (i == 0 || estadoPulsadores[i - 1])) {
digitalWrite(outPins[i], HIGH);
estadoPulsadores[i] = true;
delay(retardo);
}
}
}
if (estadoPulsadores[0] && estadoPulsadores[1] && estadoPulsadores[2] && estadoPulsadores[3] && estadoPulsadores[4]) {
//digitalWrite(pinAm, LOW);
//digitalWrite(pinVe, HIGH);
//digitalWrite(pinGi, HIGH);
//digitalWrite(pinIm, HIGH);
estadoBR = false;
juegoResuelto = true;
volverJugar = true;
if (!ejecutado){
digitalWrite(pinAm, LOW);
digitalWrite(pinVe, HIGH);
digitalWrite(pinGi, HIGH);
digitalWrite(pinIm, HIGH);
delay(3000);
digitalWrite(pinGi, LOW);
delay(7000);
digitalWrite(pinVe, LOW);
ejecutado = true;
}
//solucionado();
}
if (estadoBR == true && juegoResuelto == false) {
if (!cicloActivo) {
// Si el ciclo `if` acaba de comenzar, guarda el tiempo de inicio
tiempoInicio = millis();
cicloActivo = true;
//reiniciarPrograma();
}
if (millis() - tiempoInicio >= TIEMPO_REINICIO) {
Serial.println("10 segundos han pasado, reiniciando...");
delay(500);
reiniciarPrograma(); // Llama a la función para reiniciar el programa
}
} else {
cicloActivo = false;
}
}
// Barrido de secuencia de RELES
void cambiarEstadoLEDs(bool encender) {
for (int i = 0; i < numLEDs; i++) {
digitalWrite(outPins[i], encender ? HIGH : LOW);
delay(retardo);
digitalWrite(outPins[i], LOW);
}
}
void reiniciarPrograma() {
asm volatile (" jmp 0"); // Reinicia el Arduino
}