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 ?