#define PPS_PIN 22
#define OUT_PIN 21
volatile unsigned long pps_seconds = 0;
volatile unsigned long last_pps_millis = 0;
volatile bool pps_event = false;
volatile bool gpio21_event = false;
void IRAM_ATTR pps_isr() {
pps_seconds++;
last_pps_millis = millis();
pps_event = true;
}
void IRAM_ATTR gpio21_isr() {
gpio21_event = true;
}
void setup() {
Serial.begin(115200);
pinMode(PPS_PIN, INPUT);
pinMode(OUT_PIN, INPUT);
attachInterrupt(digitalPinToInterrupt(PPS_PIN), pps_isr, RISING);
attachInterrupt(digitalPinToInterrupt(OUT_PIN), gpio21_isr, RISING);
}
void loop() {
static unsigned long seconds_snapshot;
static unsigned long millis_snapshot;
if (gpio21_event) {
noInterrupts();
seconds_snapshot = pps_seconds;
millis_snapshot = millis() - last_pps_millis;
gpio21_event = false;
interrupts();
Serial.print("Tiempo transcurrido: ");
Serial.print(seconds_snapshot);
Serial.print(" s ");
Serial.print(millis_snapshot);
Serial.println(" ms");
}
}