Caros colegas,
Estou tendo um pequeno inconveniente em parte de um programa muito grande e complexo. Por essa razão estou colocando aqui apenas a parte critica. Espero que isso seja suficiente.
Trata-se do seguinte:
Preciso calcular uma frequência em torno de 12 a 50 ciclos por minuto. Estou usando millis conforme mostra o código;
void frequency(){
int valor_D = 0;
unsigned long temp1=0;
unsigned long temp2=0;
unsigned long temp3=0;
unsigned long tempHL=0;
int tempT=0;
unsigned long tempLL=0;
int i =0;
unsigned char flagHIGH=0;
do{
//noInterrupts();
int pino_digital = 15;
valor_D = -1*digitalRead(pino_digital);
delay(100);
//Serial.println (valor_D);
if(digitalRead(valor_D) == HIGH && flagHIGH == 0){
temp1=millis();
flagHIGH=1;
tempLL = (temp1 - temp2);
i++;
Serial.println("Tempo de nivel Alto:");
Serial.println(tempLL/1000);//Tempo entre o nivel alto e baixo Serial.println(" Segundos");
}
if(digitalRead(valor_D) == LOW && flagHIGH == 1){
temp2=millis();
flagHIGH=0;
tempHL=(temp2-temp1);
tempT= (tempHL + tempLL)/1000;
lgx= 60*(1.0/tempT);
Serial.println("Tempo de nivel Baixo:");
Serial.println(tempHL/1000);//Tempo entre o nivel alto e baixo Serial.println(" Segundos"); }
Serial.println("Tempo Total");
Serial.println(tempT);
Serial.println("Frequencia");
Serial.println(lgx);
}
}while(i < 3);
}
Tudo funciona bem, exceto pelo fato de que o primeiro valor do tempo do nível alto bem como o primeiro valor de frequência é errado. Isso acontece porque temp1-temp2 = temp1 para a primeira leitura de nível alto. Para a segunda leitura de nível alto os valores ficam corretos.
Preciso de alguma forma descartar a leitura errada. Alguém pode me ajudar com isso?