Timing between 2 events

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
1 Like