//entradas y salidas
#define pulsador1 2 // (pin 2) Maquina Operando
#define pulsador2 4 // (pin 4) Maquina Detenida
#define pulsador3 16 // (pin 16) Maquina en Cambio de Herramienta
#define ledPin1 25 // LED 1 (Maquina Operando )
#define ledPin2 26 // LED 2 (Maquina Detenida)
#define ledPin3 27 // LED 3 (Maquina en Cambio de Herramienta)
// Variables para los tiempos y estados de la maquina
unsigned long startMillis = 0; // Almacena el tiempo de inicio
unsigned long elapsedMillis = 0; // Almacena el tiempo transcurrido
//Bandera para controlar si estamos midiendo
bool midiendo1 = false;
bool midiendo2 = false;
bool midiendo3 = false;
bool tiempoInicio1 = false;
bool tiempoInicio2 = false;
bool tiempoInicio3 = false;
void setup()
{
Serial.begin(115200); // Inicializa el monitor serial
//configura los pines Led como salida
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
// Configurar los pines de los pulsadores como entrada con pull-up interno
pinMode(pulsador1, INPUT_PULLUP);
pinMode(pulsador2, INPUT_PULLUP);
pinMode(pulsador3, INPUT_PULLUP);
digitalWrite(ledPin1, LOW); // Apaga LED 1
digitalWrite(ledPin2, LOW); // Apaga LED 2
digitalWrite(ledPin3, LOW); // Apaga LED 3
Serial.println("\n\tEstado de la Maquina, Esperando pulsaciones: ");
}
void loop()
{
// Verifica si ambos pulsadores están presionados al mismo tiempo
if (digitalRead(pulsador1) == LOW && digitalRead(pulsador2) == LOW)
{
digitalWrite(ledPin1, HIGH); // Enciende LED 1
digitalWrite(ledPin2, HIGH); // Enciende LED 2
for (int i = 0; i < 2; i++)
{ // Parpadea ambos LEDs 2 veces
digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2, HIGH);
delay(200);
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
delay(200);
//Serial.println("¡ALERTA! Ambos pulsadores fueron presionados al mismo tiempo.");
//delay(200); // Pausa después de la alerta
}
Serial.println("¡ALERTA! Ambos pulsadores fueron presionados al mismo tiempo.");
delay(200); // Pausa después de la alerta
}
// Comprobar el pulsador 1
if (digitalRead(pulsador1) == LOW)
{
if (!midiendo1)
{ // Si no estaba presionado
midiendo1 = true;
if (!tiempoInicio1)
{
startMillis = millis(); // Inicia el conteo
tiempoInicio1 = true;
digitalWrite(ledPin1, HIGH);
Serial.println("\n Comenzando conteo para la Maquina en Modo Operación...");
}
else
{
elapsedMillis = millis() - startMillis; // Calcula el tiempo transcurrido
tiempoInicio1 = false;
digitalWrite(ledPin1, LOW);
unsigned long minutes = elapsedMillis / 60000;
unsigned long seconds = (elapsedMillis % 60000) / 1000;
Serial.print("Tiempo de la Maquina Trabajando: ");
Serial.print(minutes);
Serial.print(" minutos y ");
Serial.print(seconds);
Serial.println(" segundos.");
Serial.println("Esperando el siguiente comando del pulsador...");
}
delay(500);
}
}
else
{
midiendo1 = false; // Resetea el estado del pulsador 1 cuando se suelta
}
// Comprobar el pulsador 2
if (digitalRead(pulsador2) == LOW)
{
if (!midiendo2)
{
midiendo2 = true;
if (!tiempoInicio2)
{
startMillis = millis();
tiempoInicio2 = true;
digitalWrite(ledPin2, HIGH); // Enciende LED 2
Serial.println("\n Comenzando conteo para Maquina en Modo Detenida..");
}
else
{
elapsedMillis = millis() - startMillis; // Calcula el tiempo transcurrido
tiempoInicio2 = false;
digitalWrite(ledPin2, LOW);
unsigned long minutes = elapsedMillis / 60000;
unsigned long seconds = (elapsedMillis % 60000) / 1000;
Serial.print("Tiempo de la Maquina Detenida: ");
Serial.print(minutes);
Serial.print(" minutos y ");
Serial.print(seconds);
Serial.println(" segundos.");
Serial.println("Esperando el siguiente comando del pulsador...");
}
delay(500);
}
}
else
{
midiendo2 = false; // Resetea el estado del pulsador 2 cuando se suelta
}
// Comprobar el pulsador 3
if (digitalRead(pulsador3) == LOW)
{
if (!midiendo3)
{
midiendo3 = true;
if (!tiempoInicio3)
{
startMillis = millis(); // Inicia el conteo
tiempoInicio3 = true;
digitalWrite(ledPin3, HIGH);
Serial.println("\n Comenzando conteo para la Maquina en Modo Cambio de Herramienta..");
}
else
{
elapsedMillis = millis() - startMillis; // Calcula el tiempo transcurrido
tiempoInicio3 = false;
digitalWrite(ledPin3, LOW);
unsigned long minutes = elapsedMillis / 60000;
unsigned long seconds = (elapsedMillis % 60000) / 1000;
Serial.print("Tiempo de la Maquina en Cambio de Herramienta: ");
Serial.print(minutes);
Serial.print(" minutos y ");
Serial.print(seconds);
Serial.println(" segundos.");
Serial.println("Esperando el siguiente comando del pulsador...");
}
delay(500);
}
}
else
{
midiendo3 = false; // Resetea el estado del pulsador 3 cuando se suelta
}
}