#define ITRG 2
hw_timer_t *tmrcfg_mS = NULL;
unsigned long tmNow, tmPrev, tmDiff;
unsigned char l33, l66, l100, l250;
unsigned short RPM;
void IRAM_ATTR triggerISR(){
tmNow = micros();
tmDiff = tmNow - tmPrev;
if(tmPrev > 0){
RPM = (60000000 / tmDiff);
}
tmPrev = tmNow;
}
void IRAM_ATTR msISR()
{
l33++;
l66++;
l100++;
l250++;
if(l33 == 33){l33 = 0;}
if(l66 == 66){l66 = 0;}
if(l100 == 100){l100 = 0;}
if(l250 == 250){
l250 = 0;
digitalWrite(33, !digitalRead(33));
//Serial.print("RPM: "); Serial.println(RPM);
}
}
void setup() {
// put your setup code here, to run once:
pinMode(33,OUTPUT);
pinMode(ITRG, INPUT_PULLUP);
attachInterrupt(ITRG, &triggerISR, FALLING);
tmrcfg_mS = timerBegin(0, 80, true);
timerAttachInterrupt(tmrcfg_mS, &msISR, true);
timerAlarmWrite(tmrcfg_mS, 1000, true);
timerAlarmEnable(tmrcfg_mS);
//timerAlarm(tmrcfg_mS, 1000000, true, 0);
Serial.begin(115200);
//Serial.println("Hello, ESP32!");
digitalWrite(33,0);
Serial.println(timerGetFrequency(tmrcfg_mS));
}
void loop() {
// put your main code here, to run repeatedly:
delay(10);
}