Hola, quiero medir el período de una señal cuadrada, para así obtener la frecuencia de la misma, es decir, quiero medir el tiempo en cambiar la señal de 1 a 0 lógico.
Estoy utilizando la función pulseIn pero me da error a frecuencias muy bajas y también a frecuencias muy altas (0-125Hz), lo necesito para un anemómetro, el anemómetro, me da una salida senoidal, esta salida, con un comparador la convertí a una señal cuadrada de la misma frecuencia que la original, pero ahora necesito medir su frecuencia lo más exacto posible, ya que la función de transferencia del anemómetro es con la frecuencia.
Esto es lo que tengo por el momento, saludos!
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
int pin = 6;
float duracion;
float frecuencia;
float velocidad;
void setup() {
lcd.begin(16, 2); // Definimos un LCD 16x2
pinMode(pin, INPUT);
}
void loop() {
duracion = pulseIn(pin, HIGH);
duracion = (duracion * 0.000001);
if(duracion <= 0.00)
{
frecuencia=0.00;
velocidad=0.00;
}
else
{
frecuencia = (1.00 / (duracion * 2.00));
velocidad = ((frecuencia * 0.765) + 0.35);
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(frecuencia);
lcd.setCursor(7,0);
lcd.print("Hz");
lcd.setCursor(0,1);
lcd.print(velocidad);
lcd.setCursor(7,1);
lcd.print("m/s");
delay(500);
}