#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 intervalo =500; // tiempo entre rebotes
int contador=0;
#define tiempoparapdeo 300
#define tiempoledpv_am 4000
#define tiempoledpv_ledscoches 1000
unsigned long tiempoEncendido=0, t=0;
unsigned long ultimotiempopulsacion=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 > intervalo)) {
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();
comprobarPulsador();
}
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(){
encendido();
parpadeo();
comprobarPulsador();
if(millis()-tiempoEncendido>5000 && contador>0 ){
iniciado++;
contador=0;
digitalWrite(LEDC_VERDE, LOW);
digitalWrite(LEDC_AMARILLO, HIGH);
t=millis();
do{
parpadeo();
}while(millis()-t<1000);
digitalWrite(LEDP_AMARILLO, LOW);
digitalWrite(LEDC_AMARILLO, LOW);
digitalWrite(LEDC_ROJO,HIGH);
digitalWrite(LEDP_VERDE,HIGH);
esperamillis(tiempoledpv_am);
digitalWrite(LEDP_VERDE, LOW);
t=millis();
do{
parpadeo();
}while(millis()<t+tiempoledpv_ledscoches);
encendido();
Serial.printf("contador=%d\n", contador);
tiempoEncendido=millis();
}
}
/*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();
}
}*/
//if(millis()-tiempoEncendido>5000){
//if(contador>0||x>=1){
//Serial.printf("%d", contador);
//if(contador>0){
// x++;
//}
//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.