Sei que o meu motor tem um valor de 19,5hertz.
/* FreqMeasure - Example with serial output
* http://www.pjrc.com/teensy/td_libs_FreqMeasure.html
*
* This example code is in the public domain.
*/
#include <FreqMeasure.h>
int Vermelho = 2;
int Verde = 3;
void setup() {
Serial.begin(57600);
FreqMeasure.begin();
pinMode(Vermelho, OUTPUT);
pinMode(Verde, OUTPUT);
}
double sum=0;
int count=0;
void loop() {
if (FreqMeasure.available()) {
// average several reading together
sum = sum + FreqMeasure.read();
count = count + 1;
if (count > 30) {
float frequency = FreqMeasure.countToFrequency(sum / count);
Serial.println(frequency);
sum = 0;
count = 0;
if ((frequency > 19.200) && (frequency < 20.800))
{
digitalWrite(3, HIGH); // led verde - esta tudo ok.
digitalWrite(2, LOW);
Serial.println("*");
}
else {
digitalWrite(2, HIGH); // led vermelho - algo esta mal
digitalWrite(3,LOW);
}
}
}
}
este codigo esta me a dar bem mas para o motor que utilizo de momento, o problema e que vou ter de usar isto em outros motores e a frequencia nao e a mesma, precisava de algo que durante por exemplo 5 segundos calculase a frequencia media, e so depois e que se adpatava o codigo que agora tenho. acho que tenho de usar a funçao millis. e precisava tambem que depois da frequencia dada me desse 1%+ e 1% - (if ((frequency > 19.200) && (frequency < 20.800)), para dar uma margem