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);
}
}