//se desea medir el tiempo en ms que una señal permanece a nivel alto y que este tiempo se
//envie por el puerto serie en el momento en que la señal pase a nivel bajo (flanco de bajada).
//Se pide implementar esto en un microcontrolador esp32. Para ello se puede emplear la funcion
//millis() que devuelve los milisegundos que han transcurrido desde que se encendió el
//microcontrolador.
#define boton 18
int tiempoI;
int duracion;
volatile bool boton_pulsado = false;
void IRAM_ATTR medida(){
if(digitalRead(boton) == LOW){
tiempoI = millis();
boton_pulsado = true;
}
else if(digitalRead(boton) == HIGH && boton_pulsado){
duracion = millis() - tiempoI;
Serial.print("Duración del pulso: ");
Serial.print(duracion);
Serial.println(" ms");
boton_pulsado = false;
}
}
void setup() {
Serial.begin(115200);
pinMode(boton, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(boton), medida, CHANGE);
}
void loop() {
delay((10));
}