5 votos

(Malos) cuentas impulsos digitales con Arduino usando interrupciones y un interruptor de 4 contactos

Tengo que escribir un sketch de Arduino para realizar algunas tareas con el número de pulsos digitales detectado por un pin. Para este propósito, decidí usar las interrupciones en el fin de no perderse ningún pulso y realizar el resto del algoritmo prácticamente al mismo tiempo.

Con el fin de hacer una prueba rápida, me puse en este circuito:

enter image description here

y me ha cargado este boceto (basado en el ejemplo de la attachInterrupt documentación):

volatile unsigned int pulses=0;

void setup() {
  attachInterrupt(0, countpulses, FALLING); // interrupt 0 = pin 2      
  Serial.begin(9600);
}

void loop() {
  Serial.println(pulses);
  delay(500);
}

void countpulses() {
  pulses++;
}

Lo que me espera aquí es que cada vez que presione y suelte el interruptor (y el led rojo se enciende y se apaga), debe leer una de pulso. Lo extraño es que se cuenta de dos pulsos en lugar de ello, es decir, que se trata de un pulso por cada cambio de estado en lugar de sólo por la "caída".

Es esta una cuestión de código o es debido a que el interruptor? Tengo el mismo problema de la manipulación directa de las señales digitales en el pin 2?

6voto

lillq Puntos 4161

Como Jon dice que los LEDs no tienen resistencias limitadoras de corriente; el rojo está conectado directamente entre +5 V y tierra, y el azul entre el pin de e/S y la tierra. Estoy un poco perplejo por el tacto interruptor. Este tipo de interruptores normalmente tiene los dos de la izquierda pins conectados, y los dos pin correcto.

enter image description here

Cuando se presiona el interruptor de la izquierda y la derecha están conectados. (Esta manera de conexiones internas simplifica el cableado hasta un matric de interruptores.) Aquí puedes leer cómo conectar un interruptor a un microcontrolador de la entrada.

Si tú que estás especulando que el LED rojo, así que va a salir. Pero, y lo peor, también te corto-circuito de la fuente de alimentación: el interruptor para conectar el +5 V en el lado izquierdo con el suelo a la derecha.

Por favor arreglar los problemas de primer y el informe de nuevo.

5voto

GSerg Puntos 33571

Interruptores mecánicos experimentan "rebote de contacto", que significa que una prensa (o liberación) del interruptor puede causar el contacto electical a make/break contacto varias veces en rápida sucesión. Esto es lo que está viendo con el código tal y como está actualmente. El Arduino es lo suficientemente rápido como para responder a cada una de las interrupciones causadas por este rebote, aunque usted no puede verlo en el LED.

4voto

kender Puntos 18446

Un par de comentarios antes de llegar a lo que podría ser el verdadero problema:

  • Utilizando un DPST botón no? (de doble polo, un solo tiro) Si Recuerdo, la mayoría de los botones que he visto de ese tipo tienen dos conduce un cortocircuito en uno de los lados que podría ser una cosa muy mala si cierto en su circuito de alimentación y la tierra se han cortocircuitado).
  • Usted no tiene ninguna limitación de la corriente de las resistencias de los LEDs (el arduino puede tener uno construido en pero ciertamente no hay uno en el breadboard)

Suponiendo que el anterior no son cuestiones que, probablemente está experimentando interruptor de rebote

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X