unsigned long milisAnteriores;
const long tiempoLuz = 8000;
const int pinLuz = 13;
const int pinTecla = 12;
const int pinFinalCarrera = 11;
int estadoTecla;
int estadoAnteriorTecla;
int estadoFinCarrera;
int estadoAnteriorFinCarrera;
int llave;
unsigned long milisActuales;
int estadoF;

//Función Antirebote
const int tiempoAntirrebote = 15;

boolean antirrebote(int pin) {
  int contador = 0;
  boolean estado;
  boolean estadoAnterior;
  
  do {
   estado = digitalRead(pin);
   if(estado != estadoAnterior) {
     contador = 0;
     estadoAnterior = estado;
   }
   else {
     contador = contador + 1;
   }
   delay(1);
  } while(contador < tiempoAntirrebote);
  
  return estado;
}

void setup() {
  pinMode (pinLuz, OUTPUT);
  pinMode (pinTecla, INPUT);
  pinMode (pinFinalCarrera, INPUT);
  digitalWrite(pinLuz, HIGH);
  digitalWrite(pinTecla, LOW);
  digitalWrite(pinFinalCarrera, LOW);
  
}

void loop() {
  
estadoTecla = digitalRead(pinTecla);//
if (estadoTecla != estadoAnteriorTecla){
 if(antirrebote(pinTecla)){

    if(estadoTecla == 1){
    
      llave = 1 - llave;
      estadoF = 0;
    }
    }
     estadoAnteriorTecla = estadoTecla;
  }

  // switch portón
  milisActuales = millis();
  if (estadoF == 0){
estadoFinCarrera = digitalRead (pinFinalCarrera);

   if (estadoFinCarrera != estadoAnteriorFinCarrera){
     estadoAnteriorFinCarrera = estadoFinCarrera;
  if(antirrebote(pinFinalCarrera)){
    if (estadoFinCarrera == 1){
      
       milisAnteriores=milisActuales;
       llave=1;
       estadoF= 1;
      
    }  
  }
   }
   }
   else {
        if(milisActuales-milisAnteriores>=tiempoLuz){
         
     llave=0;
     estadoF=0;
      digitalWrite(pinLuz, HIGH);
          delay(300);
          digitalWrite(pinLuz, LOW);
delay(5000);

        }
   }
   if (llave == 1){
        digitalWrite(pinLuz, LOW);
     
    }
    else {
      digitalWrite(pinLuz, HIGH);
      
    }

}