Problemas con la interrupción

Tengo programada una interrupción por hardware que esta conectada a un Reed Switch. Cada vez que el Switch se cierra en la función de la interrupción aumento en uno el conteo. Sin embargo me está contando más de una vez, es decir pasa de estado bajo a alto el pin del arduino,espero que cuente 1 vez pero cuenta 5,6,8. Alguien podría decirme a qué se debe este problema. Gracias

Es un problema de rebote; típico de los interruptores y botones mecánicos.
Cuando los contactos son empujados entre sí, no se tocan constantemente en primera instancia; parte de la energía aplicada para la presión, tiende a ir en dirección contraria a la fuerza. Esto produce lo que conocemos como "rebote".

Aunque el mecanismo contactor sea visible, este rebote no se logra apreciar con ojo humano; el efecto tarda unos cuantos microsegundos (y efectivamente creando una frecuencia de conmutación en el rango de los KHz, solo que en un lapso mucho menor que un parpadeo).

Ahora bien, la interrupción se activa tan pronto como el estado del pin cambie; y el microcontrolador muy probablemente es un ATmega328P que trabaja a 16 MHz.
A esa velocidad: entre iniciar la ejecución de la interrupción, sumarle a la variable y reanudar el programa principal; por mucho le toma un único microsegundo. Es tiempo suficiente para disparar otra interrupción mientras el rebote ocurre.

Recuerda que antes mencioné que este rebote provoca una oscilación indeseada, en el rango de los KHz pero muy muy corta; pues esa diminuta oscilación es la que hace que cuente hasta 8 en un solo accionado.

Se puede solucionar por el lado del hardware, para eso se conecta un capacitor electrolítico de 10 uF entre dicho pin y tierra. Obviamente, el lado negativo va a esta última.
Al tratarse de contacto mecánico, supondré que el conmutado no es tan rápido. Lo digo porque el capacitor hace las veces de "filtro pasa-bajos", el cual elimina las oscilaciones en el rango de los KHz y superior; por lo tanto, también elimina el problema del rebote.

A ver que tal funciona esto.

void mi_rutina_interrupcion() {
 static unsigned long last_interrupt_time = 0;
 unsigned long interrupt_time = millis();
 // Si la interrupción es mas rápida que 200mseg, supongo rebote y la ignoro
 if (interrupt_time - last_interrupt_time > 200)  { // ajusta 200 al valor que te funcione.
   ... aca va tu código o solo cuentas
 }
 last_interrupt_time = interrupt_time;
}

Cuidado con esto:

Lucario448:
... Se puede solucionar por el lado del hardware, para eso se conecta un capacitor electrolítico de 10 uF entre dicho pin y tierra.

Porque como bien dices ocurre que:

Lucario448:
... Lo digo porque el capacitor hace las veces de "filtro pasa-bajos", el cual elimina las oscilaciones en el rango de los KHz y superior; por lo tanto, también elimina el problema del rebote.

Ese filtro paso bajo elimina las frecuencias altas, sí, pero al eliminar esas frecuencias estás eliminando el flanco de la señal y puede ocurrir (10 uF es mucho) que el pin no reconozca la interrupcion.

Se podrian hacer pruebas con C = { 10nF a 100nF }.

A mi la propuesta del capacitor no me agrada, pero son estrategias y todas son viables.

A mi tampoco.
Según el datasheet el rise time y el fall time son ambos de 500ns como máximo por lo que hay que hilar fino al poner una red RC en el pin.