here is a simple example using attachInterupt() to measure the time between pulses, e.g. presses of a button
// ESP32 - measure time between rising edges - use low frequency pulses
#define RISE1 18 // pin to input pulses
void setup() {
Serial.begin(115200);
delay(1000);
Serial.printf("\n\nESP32 measure time between rising edges using micros()\n");
attachInterrupt(digitalPinToGPIONumber(RISE1), rising1, RISING); // detect rising edge on pin 18
}
// measure time between rising edge using micros()
volatile unsigned long pulseStart;
void rising1() {
pulseStart = micros();
}
// display time difference between current pulseStart and last pulseStart
void loop() {
static unsigned long lastPulseStart = 0;
if (lastPulseStart != pulseStart) {
Serial.printf("pulseStart = %luuSec pulseStart-lastPulseStart = %luuSec = %.3fseconds\n", pulseStart,
pulseStart - lastPulseStart, (pulseStart - lastPulseStart)/10e6);
lastPulseStart = pulseStart;
}
}
it was tested on a ESP32 but should be simple to modify (mainly changing Serial.printf() to Serial.println() statements)
input 0.5Hz pulses 2second period
serial monitor output
ESP32 measure time between rising edges using micros()
pulseStart = 14202669uSec pulseStart-lastPulseStart = 2000026uSec = 0.200seconds
pulseStart = 16202695uSec pulseStart-lastPulseStart = 2000026uSec = 0.200seconds
pulseStart = 18202721uSec pulseStart-lastPulseStart = 2000026uSec = 0.200seconds
pulseStart = 20202746uSec pulseStart-lastPulseStart = 2000025uSec = 0.200seconds
pulseStart = 22202772uSec pulseStart-lastPulseStart = 2000026uSec = 0.200seconds
pulseStart = 24202798uSec pulseStart-lastPulseStart = 2000026uSec = 0.200seconds
pulseStart = 26202824uSec pulseStart-lastPulseStart = 2000026uSec = 0.200seconds
pulseStart = 28202850uSec pulseStart-lastPulseStart = 2000026uSec = 0.200seconds
pulseStart = 30202875uSec pulseStart-lastPulseStart = 2000025uSec = 0.200seconds
pulseStart = 32202901uSec pulseStart-lastPulseStart = 2000026uSec = 0.200seconds
.....
pulseStart = 106203852uSec pulseStart-lastPulseStart = 2000026uSec = 0.200seconds
pulseStart = 108203878uSec pulseStart-lastPulseStart = 2000026uSec = 0.200seconds
pulseStart = 110203903uSec pulseStart-lastPulseStart = 2000025uSec = 0.200seconds
pulseStart = 112203929uSec pulseStart-lastPulseStart = 2000026uSec = 0.200seconds
pulseStart = 114203955uSec pulseStart-lastPulseStart = 2000026uSec = 0.200seconds
pulseStart = 116203980uSec pulseStart-lastPulseStart = 2000025uSec = 0.200seconds
.....
pulseStart = 296206278uSec pulseStart-lastPulseStart = 2000026uSec = 0.200seconds
pulseStart = 298206303uSec pulseStart-lastPulseStart = 2000025uSec = 0.200seconds
pulseStart = 300206329uSec pulseStart-lastPulseStart = 2000026uSec = 0.200seconds
pulseStart = 302206354uSec pulseStart-lastPulseStart = 2000025uSec = 0.200seconds
pulseStart = 304206380uSec pulseStart-lastPulseStart = 2000026uSec = 0.200seconds
