PulseIn para RPM ?

Sempre que a ventoinha roda a função rpm_fun é executada.. eu queria implementar uma opção no Loop para saber se esta função está a ser executada ou não..

Ela é executada de 0 a 20 e depois faço a contagem das rotações, mas se ela parar antes de chegar a 20 eu não tenho como saber se parou ou não.. alguma ideia de como posso saber se a função rpm_fun está a ser executada e o valor de rpmcount alterado?

Se calhar até é fácil.. vou testar fazer isto:

 volatile byte rpmcount;
 unsigned int rpm;
 unsigned long timeold;
 
 int rmpfan1state=0;
 long intervalRPM = 8000; //8 segundos // 
 long previousMillis = 0;
  
 void setup()
 {
   Serial.begin(9600);
   attachInterrupt(0, rpm_fun, RISING);
   rpmcount = 0;
   rpm = 0;
   timeold = 0;
 }
 void loop()
 {
   if (rpmcount >= 20) { 
     //Update RPM every 20 counts, increase this for better RPM resolution,
     //decrease for faster update
     rpm = 30*1000/(millis() - timeold)*rpmcount;
     timeold = millis();
     rpmcount = 0;
     Serial.println(rpm,DEC);
   }
   
   unsigned long currentMillis = millis();
   if(currentMillis - previousMillis > intervalRPM) {
    previousMillis = currentMillis;
  if (rmpfan1state==1) rmpfan1state=0; 
  if (rmpfan1state==0) Serial.println("Fan DESLIGADA!");
	} 
 }
 
 void rpm_fun() //Each rotation, this interrupt function is run twice
 {
   rpmcount++;  
 rmpfan1state=1;[/b]
 }

Acho que pela data das postagens ninguém mais deve se interessar pela tópico, mas mesmo assim, lá vai.

Se fizermos duas sequências, sendo uma para calcular o tempo do pulso HIGH e em seguida calcular o tempo em que permanece como LOW, não teríamos o ciclo completo? Me corrijam se estiver errado. Estou ajudando um amigo meu num projeto dele e não temos acesso ao eixo de um rotor, então conseguimos uma forma de contar os pulsos gerados a cada volta, através de um sensor e a partir daí pensamos numa forma de conseguir medir a frequência de giro, a qual esperamos que seja essa que foi proposta.

Espero ter ajudado e receber alguma ajuda.

Até mais!

A maneira mais simples será ligar o T1 (não o T0 por causa do millis), a um pino externo para usar esse temporizador como contador de eventos.

Depois criar uma interrupcão do T1 de 256 em 256, ou como este é um timer de 16 bits de 65000 em 65000 e quando essa interrupcão se der, ver quanto tempo passou desde a última.
Pode fazer-se ao contrário e de x em x tempo ver quantas contagens tens e fazer as contas a partir daí.

como somar os valores obtido com o pulsein ?