Botones para un juego de tiempo

0

Quiero crear un juego con botones de estilo arcade usando arduino. Sé que hay bucles simples que puede tener que verificar para que un botón cierre un circuito, pero si los botones se verifican secuencialmente en un boceto de arduino, ¿no aumentaría las posibilidades de que el primer botón en el bucle gane siendo el primer circuito verificado? Parece que esta posibilidad aumenta si el boceto hace más que solo verificar las prensas (los LED de control, la cuenta regresiva del temporizador, etc.). ¿Cuáles son las formas de asegurarse de que el ganador sea realmente el primero en cerrar su circuito en lugar del primer circuito que se verifica?

    
pregunta Roger

2 respuestas

3

Conecte ambos botones al mismo puerto ATmega328 (por ejemplo, PORTB), luego lea el estado de los 8 pines PORTB simultáneamente leyendo PINB, el registro de pines de entrada de puerto PORTB. Consulte la sección 13 de la hoja de datos de ATmega328. Puertos de E / S, sección 13.4.4 PINB - La dirección de los pines de entrada del puerto B. Suponiendo que recién está comenzando con la programación, esto es muy similar a lo que ha estado haciendo. La función digitalRead de arduino en realidad lee el registro de pines de entrada de puerto seleccionado, pero luego solo le informa sobre uno de los ocho pines. En realidad, es más simple simplemente leer el registro PINB directamente, ya que le importa leer los 8 pines de entrada simultáneamente. Asegúrese de probar el caso en el que ambos botones se presionan simultáneamente.

El manejo de interrupciones es otro enfoque, pero como indica que está preocupado por determinar qué botón se presionó primero, tenga cuidado de entender cómo funciona la prioridad de interrupción. En el caso de un "empate" entre dos fuentes de interrupción, la interrupción de prioridad más alta gana.

    
respondido por el MarkU
0

Si el bucle de verificación de botones es rápido, digamos > 100Hz, la diferencia sería muy difícil de detectar. Pero, si quieres hacerlo correctamente, debes usar una interrupt , que llamará a un método cuando cualquier botón Está activado. Como dice la referencia, "Las interrupciones son útiles para hacer que las cosas sucedan automáticamente en los programas de microcontroladores y pueden ayudar a resolver problemas de tiempo".

Debes hacer una variable que almacene el ID del ganador (si hay uno). Una vez que se configuran las interrupciones en el método de configuración, el bucle principal solo tiene que verificar la variable ganadora. Cada uno de los diversos botones de entrada debe dirigirse a un método corto que verifique que no haya ganador y establezca la variable de ganador si eso es cierto. La comprobación de que no hay ganador es solo para garantizar que una segunda interrupción no sobrescriba al ganador real antes de que el bucle principal lea la variable del ganador.

    
respondido por el Alex

Lea otras preguntas en las etiquetas