#define LEDP_VERDE 27
#define LEDP_AMARILLO 12
#define LEDC_ROJO 19
#define LEDC_AMARILLO 5
#define LEDC_VERDE 16
#define PULSADOR 34
unsigned long tic,tac;
volatile unsigned long ref_interp; // gestión del rebote
volatile const unsigned int interval =500; // tiempo entre rebotes
int contador=0;
#define tiempoparapdeo 300
#define tiempoledc_amarillo 1000
#define tiempoledpv_am 4000
#define tiempoledpv_ledscoches 1000
unsigned long tiempoEncendido=0;
unsigned long ultimoTiempoPulsacion=0;
int contadorM=0;
int x=0;
void setup(){
Serial.begin(115200);
pinMode(LEDP_VERDE, OUTPUT);
pinMode(LEDC_VERDE, OUTPUT);
pinMode(LEDP_AMARILLO, OUTPUT);
pinMode(LEDC_ROJO, OUTPUT);
pinMode(LEDC_AMARILLO, OUTPUT);
pinMode(PULSADOR, INPUT);
}
void comprobarPulsador() {
// Leer el estado del pulsador
int estadoPulsador = digitalRead(PULSADOR);
// Si el pulsador se ha presionado (estado bajo) y ha pasado suficiente tiempo desde la última pulsación
if (estadoPulsador == LOW && (millis() - ultimoTiempoPulsacion > interval)) {
contador++; // Incrementa el contador
ultimoTiempoPulsacion = millis(); // Actualizamos el tiempo de la última pulsación válida
}
}
void esperamillis(unsigned long tiempoespera){
tic=millis();
do{
tac=millis();
}
while(tac-tic<tiempoespera);
}
void parpadeo(){
digitalWrite(LEDP_AMARILLO, HIGH);
esperamillis(tiempoparapdeo);
digitalWrite(LEDP_AMARILLO, LOW);
esperamillis(tiempoparapdeo);
}
void encendido(){
digitalWrite(LEDC_ROJO, LOW);
digitalWrite(LEDC_VERDE, HIGH);
}
void loop(){
comprobarPulsador();
if(contador>0 && millis()-tiempoEncendido>5000){
digitalWrite(LEDC_VERDE, LOW);
digitalWrite(LEDC_AMARILLO, HIGH);
esperamillis(tiempoledc_amarillo);
digitalWrite(LEDC_AMARILLO, LOW);
digitalWrite(LEDC_ROJO,HIGH);
digitalWrite(LEDP_VERDE,HIGH);
esperamillis(tiempoledpv_am);
digitalWrite(LEDP_VERDE, LOW);
parpadeo();
esperamillis(tiempoledpv_ledscoches);
encendido();
contador=0;
tiempoEncendido=millis();
}
else{
encendido();
tiempoEncendido=millis();
parpadeo();
}
}
//Para hacerlo sin interrupciones creamos una función void en la que con un digitalread se detecte que el pulsador está en LOw,
//y ponemos una condición para que asegurarnos de que haya pasado un intervalo de timepo desde la última pulsadión, para evitar rebotes.