const int sensorPin = 4; // Pin del sensor IR
const int marcas = 1; // Número de marcas en el disco
volatile unsigned long ultimoTiempo = 0;
volatile unsigned long periodo = 0;
float rpm = 0;
void IRAM_ATTR contarPulso() {
unsigned long ahora = micros();
if (ultimoTiempo > 0) { periodo = ahora - ultimoTiempo; }
ultimoTiempo = ahora;
}
void setup() {
Serial.begin(115200);
pinMode(sensorPin, INPUT);
attachInterrupt(digitalPinToInterrupt(sensorPin), contarPulso, FALLING);
}
void loop() {
// Copia segura de variables compartidas
noInterrupts();
unsigned long p = periodo;
interrupts();
if (p > 0) {
rpm = p ;//(60000000.0 / p) / marcas;
Serial.print("RPM: ");
Serial.println(rpm);
Serial.print("Microseguno: ");
Serial.println(micros());
} else {
Serial.println("Esperando señal...");
}
delay(500); // Ajusta la frecuencia de actualización
}