Problema con velocimetro

Hola,

Hoy he estado montando un inventillo con un trafo, y necesitaba medir la frecuencia de la red eléctrica.Me he creado este pequeño programa y me he acordado de este post.Uso interrupciones, y es similar a lo que necesitas. Por cierto,si alguien necesita tener controlado el paso por cero de la senoidal de la red eléctrica (por ejemplo para el control de triacs), también le sirve este código.

Pongo por aquí el código por si te ayuda en algo:

volatile unsigned long tanterior;
volatile unsigned long tnuevo;
volatile float frec;

void setup() 
{
  Serial.begin(19200); 
  pinMode(2,INPUT);
  pinMode(13,OUTPUT);  //Led
  attachInterrupt(0,myfunc,CHANGE);
}

void loop() 
{
  Serial.println(frec);
}

void myfunc()
{
  if (digitalRead(2))
  {
    tanterior=tnuevo;
    tnuevo=micros();
    frec=1000000.0/(tnuevo-tanterior);
  }
  digitalWrite(13,!digitalRead(13));  //Led
}

La salida digital (dónde esta conectado el led de Arduino) la cambio de estado cada vez que entro a la rutina de interrupción sólo con fines de debug, ya que conecto el analizador lógico para ver que todo esta funcionando como debería.

Acerca de la pregunta de uno de los post por qué no puede ser LOW... entraría a la interrupción todo el rato que dure el pulso bajo (ya que es activación por nivel). Lo que te interesa es entrar una sólo una vez, para capturar el tiempo.

Hace tiempo escribí este post para cálculo de rpm de un coche => Tinkering with Electronics...: Shift Lights con Arduino

Saludos :wink:

Igor R.