Medición del Periodo de una señal cuadrada

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);

}

mira aqui
http://forum.arduino.cc/index.php/topic,31681.0.html

http://forum.arduino.cc/index.php/topic,124310.0.html

este cuenta revoluciones por minuto, pero puedes cambiarlo a hz

volatile unsigned long cont_rpm;

void setup() {
pinMode(2,INPUT);
attachInterrupt(0, rpm, RISING);
Serial.begin(9600);

}

void rpm()
{
cont_rpm++;

}

void loop()
{
static unsigned long rpm_ant;
static unsigned long t_anterior;
static float rpm_actuales;

rpm_ant=cont_rpm;
t_anterior=millis();

rpm_actuales=(cont_rpm-rpm_ant)/(2.0*(millis()-t_anterior)/60000);
Serial.println(rpm_actuales);
}

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.

¿Qué distancia hay entre el anemómetro y el arduino?.

¿Qué cable tienes?

Saludos

Tu problema es que solo mides el pulso HIGH, te falta medir el pulso LOW, y completar el periodo de la señal cuadrada que conformaste de tu anemómetro.
Recuerdo tu problema cuando lo presentaste.
Tu período sera la duracionHIGH mas la duraciónLOW ambas sumadas son T = 1/f
repite lo mismo para LOW y tendrás lo que falta.
Las mediciones son precisas segun lo que dice la libreria desde con pulsos con una anchura de 10 microsegundos a tres minutos.