contador de vueltas

Hola gente, mi nombre es Gabriel y soy nuevo en el foro y nuevo en el mundo ARDUINO.

Estoy por embarcarme en un pequeño proyecto que llevara una arduino nano como elemento principal.
Necesito (para simplificar un poco la explicacion) contar las idas y venidas de un carro sobre una guia, es decir hay un carrito que va y viene sobre una guia, y necesitaria contar cuantas idas y venidas tiene por minuto ese carro y poner una funcion que desde un boton de start comience a contar el total d idas y venidas, es decir una funcion que cuente cuantas idas/venidas tiene por minuto y que vaya contando el total de las idas/venidas hasta que se presione nuevamente el boton start.
Para esto pensaba instalar un sensor hall, el receptor fijo y el iman sobre el carrito movil, luego no se si puedo ingresar los datos que saque del sensor directo a arduino junto con un circuito generador de ondas cuadradas y ahi con algo de software pedirle que haga un promedio cada 3 idas/venidas y la proyeccion al minuto, esto lo puedo hacer directamente con software de arduino o necesitaria poner algun bloque de flip-flops antes?? otra pregunta puntual es que usar de pulso de reloj para arduino. Sobre esto ultimo detenerme, no se si arduino pueda contar cuantos flancos de reloj pasen entre pulso y pulso del sensor hall y de ser asi que me recomiendan que use de relof para arduino.
Espero su respuesta y muchas gracias!!

Si piensas poner un iman en el carrito entonces mejor pones algo que active 2 simples microswitches (de los que tienen una rueda en el lever). Cenectas cada microswitch a una entrada digital de arduino con un pull up resistor de 1K a 5V y cada vez que el carrito active el switch esa entrada va a "0" logico. Cuentas la cantidad de veces que cada entrada fue a "0' y ya sabes las idas y venidas. No se el Arduino Nano,; pero el UNO y el Duemilanove con los que he trabajado tinen su reloj en el Board 16MHz y no hay que anadirle reloj externo. QuizAs si usas unio de ellos te simplificas el trabajo.

int ContadordeIdas=0;
int ContadordeVenidas=0;
int Flag1=0;
int Flag2=0; // tambien puedes usar boolean para las banderas

void setup()
{
//Aqui tu setup()
}

void loop()
{
if(digitalRead(PinIdas)==LOW&&Flag1==0)
{
ContadordeIdas=ContadordeIdas+1;
Flag1=1;//bandera para que solo lo cuente una vez
Flag2=0; //Desactiva la bandera de venidas
}
}

if(digitalRead(PinVenidas)==LOW&&Flag2==0)
{
ContadordeVenidas=ContadordeVenidas+1;
Flag1=0; //Desactiva la bandera de idas
Flag2=1; //Activa la bandera de venidas para prevenir conteo multiple
}

Usar las banderas permite no tener que introducer delay que en ocasiones crean otros problemas en el programa