//Decalaracion de etiquetas

#define Led_Verde 5
#define Led_Amarillo 4
#define Led_Rojo 3
#define Sirena 8
#define Rele 2

#define BatOk  12.5
#define BatCorte 12
#define BatSobreTension 14.4


//DEclaracion de variables
float Xvoltaje = 0.0;

void setup()
 {
  Serial.begin(9600); // Inicializar la comunicación serial
 
  pinMode(Led_Verde, OUTPUT);
  pinMode(Led_Amarillo, OUTPUT);
  pinMode(Led_Rojo,OUTPUT);
  pinMode(Sirena,OUTPUT);
  pinMode(Rele,OUTPUT);
  digitalWrite(Rele,false);
}

void loop()
{
  
 Xvoltaje=medirTension(); //llamo a la funcion de medir tension
  
  if ((Xvoltaje > BatOk) && (Xvoltaje < BatSobreTension))
 	 {
      Serial.println("Tension ok");
   	  digitalWrite(Rele,true);
  	  digitalWrite(Led_Verde,true);  
 	 }
  	 else
 	  {
  	  if (Xvoltaje  > BatSobreTension)
    	  {
       Serial.println("!!Sobre Tension!!");
       digitalWrite(Rele,false);
       // 
       digitalWrite(Led_Verde,true); 
       digitalWrite(Led_Amarillo,true); 
       digitalWrite(Led_Rojo,true);   
       delay(500);
       digitalWrite(Led_Verde,false); 
       digitalWrite(Led_Amarillo,false); 
       digitalWrite(Led_Rojo,false);   
       delay(500);
  	  }
     else      
       {
        Serial.println("Tension de Corte");
        digitalWrite(Led_Rojo,true); 
       	digitalWrite(Led_Amarillo,false);
        digitalWrite(Led_Verde,true); 
        digitalWrite(Rele,false);          
       }
     }
}

float medirTension()
{
 int sensorValue = analogRead(A0); // Leer el valor del pin analógico
  
  // Convertir el valor analógico a tensión (0-5V)
  float sensorVoltaje = sensorValue * (5.0 / 1023.0); 
  
  // Ajustar la lectura según el divisor de voltaje
  float voltaje = sensorVoltaje * ((10.0 + 5.0) / 5.0); 

  // Mostrar la tensión leída
//  Serial.print("Voltage: ");
 // Serial.println(voltage);  
  return  voltaje;
  delay(3000);
}