(Malo) contando pulsos digitales con Arduino usando interrupciones y un interruptor de 4 pines

5

Tengo que escribir un boceto de Arduino para realizar algunas tareas con la cantidad de pulsos digitales detectados por un pin. Para este fin, elegí usar interrupciones para no perder ningún pulso y realizar el resto del algoritmo virtualmente al mismo tiempo.

Para hacer una prueba rápida, puse este circuito:

ycarguéesteboceto(segúnelejemploenla attachInterrupt documentation ):

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 esperaba aquí es que cada vez que presiono y suelto el interruptor (y el led rojo se enciende y apaga), debe leer un pulso. Lo extraño es que cuenta dos pulsos en su lugar, es decir, cuenta un pulso para cada cambio de estado en lugar de solo para el que "cae".

¿Esto es una cuestión de código o se debe al interruptor? ¿Tendré el mismo problema al manejar señales digitales directas en el pin 2?

    
pregunta etuardu

3 respuestas

5

Los interruptores mecánicos experimentan un "rebote de contacto", lo que significa que una pulsación (o liberación) del interruptor puede hacer que el contacto eléctrico realice / interrumpa el contacto varias veces en una rápida sucesión. Esto es lo que está viendo con su código tal como está actualmente. El Arduino es lo suficientemente rápido como para responder a cada una de las interrupciones causadas por este rebote, aunque no pueda verlo en el LED.

    
respondido por el Dave Tweed
6

Como Jon dice que los LED 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 tierra. Estoy un poco confundido por el interruptor de tacto. Este tipo de interruptores normalmente tiene los dos pines izquierdos conectados y los dos pines derechos.

Cuandopresionaselinterruptorhacialaizquierdayhacialaderechaestánconectados.(Estaformadeconexionesinternassimplificaelcableadodeunamatrizdeconmutadores). Aquí puede leer cómo conectar un interruptor a la entrada de un microcontrolador.

Si haces eso, estás cortocircuitando el LED rojo, por lo que se apagará. Pero, y peor aún, también cortocircuitará la fuente de alimentación: el interruptor conectará el +5 V en el lado izquierdo y la tierra en el derecho.

Por favor, corrija esos problemas primero y vuelva a informar.

    
respondido por el stevenvh
4

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

  • ¿Estás usando un botón DPST allí? (polo doble, tiro simple) Si Recuerdo que la mayoría de los botones que he visto de ese tipo tienen dos conduce en corto a un lado, lo que podría ser una cosa muy mala si eso es cierto en su circuito (potencia y tierra cortocircuitadas).
  • No tiene ninguna resistencia limitadora de corriente para los LED (el arduino puede tener uno incorporado pero ciertamente no hay uno en el Breadboard)

Suponiendo que lo anterior no es un problema, es probable que esté experimentando cambio de cambios

    
respondido por el Jon L

Lea otras preguntas en las etiquetas