Cuestionario control de juego usando "Zumbadores de luces y sonidos" y Arduino (4 / 5 paso)

Paso 4: Arduino programa

Resumen

Si no está familiarizado con programación de Arduino, tomar algún tiempo antes de comenzar a aprender los conceptos básicos de programación de Arduino. El Arduino Uno tiene un cómodo puerto USB que proporciona una conexión a la computadora y también enciende el Arduino de alimentación USB. Usted necesita saber cómo programar el Arduino y descargar programas a lo que usted puede descargar el programa con las instrucciones en el Arduino. O también puede crear sus propias variaciones. Es uno de los aspectos de este proyecto, es que las posibilidades son ilimitadas!

El sitio de la web de Arduino (http://arduino.cc/) tiene muchos recursos para rápidamente llegar a la velocidad en la programación de Arduino y entornos de programación para descargar.

OK, ahora que está familiarizado con el Arduino Uno y puede cargar un programa a él, vamos a ir sobre la operación de V1.1 del programa suministrado con estas instrucciones.
Operación básica

El comportamiento que queremos conseguir de la caja de control es el siguiente:

Después de ser activado, los botones están esperando a ser presionado.
El primer botón pulsado es el "ganador" y las luces y sonidos en ese botón se activan. Ya que el botón se apaga después de unos 2 segundos, el controlador esperará durante 2,5 segundos y luego se volverá a activar las luces sólo en el botón, pero no el sonido. Esto hace visible el botón que fue pulsado primero, pero no mantiene el ruido de nivel, que llegaría a ser molesto.
Otros botones pueden plancharse después el primer botón (esto es lo que normalmente sucederá) y el orden en el que se pulsan los botones es detectado por el controlador.
El cuadro de control están encendidos como sigue, mostrando el orden en que fueron presionados los botones:
1er lugar - el LED está encendido sólido
2do lugar - el LED parpadea rápidamente
3er lugar - el LED si parpadea lentamente
4to lugar - el LED está apagado
Presionando el botón reset apagará todos los LEDs en la caja de control y dejar de conducir la línea de "activar" al botón de ganar. Esto hará que todos los botones para callar y tener sus luces después de que el botón ganador ha completado la última 2.5s ciclo.
Si no se presiona el botón reset, 60 segundos después de presiona el botón de "ganador", el sistema se reactivará automáticamente sí mismo. Por supuesto usted puede ajustar el segundo 60 valor de tiempo de espera en el código a otra cosa si quieres.
Ponemos un "huevo de Pascua" en el código como algo divertido para la gente a tratar de encontrar. Lo dejamos a usted a encontrarlo y para cambiar el programa por cualquiera de su propio "huevos de Pascua" que usted puede pensar.

Teoría de operación

Revisaremos algunos de los principales enfoques y técnicas en el programa.
Encuestas vs retardo

Muchos de los programas de ejemplo de Arduino utilizan el delay(n); Declaración para lograr del LED que parpadea. Dado que queremos no sólo captura qué botón fue presionado 1, sino también los botones después de esto, el enfoque de "retraso" no funciona para nosotros. Pregunto si se presionó el botón 1 y estábamos en un bucle para manejar el LED con un retardo de 500 ms (1/2 segundo). 1/2 segundo es mucho tiempo y habría dos o incluso tres botones pulsados durante el tiempo de "demora" y no tenemos manera de saber sobre él! Podrían suceder varias cosas, cuando leemos los botones, se presionan los tres, o quizás uno es presionado porque el botón fue presionado y liberado ya! Esto haría que los jugadores muy descontentos con nuestro juego.

Por lo tanto, no podemos usar la función "delay". En su lugar se programa la lógica de "void loop()" en un método de "votación". Básicamente esto significa que intentará miniminze retrasos en nuestro código y guardar bucle una y otra vez comprobando el estado de los botones. También veremos si es el momento para nosotros cambiar el estado de un LED o un buttton. En el momento del agrupación circuito en V1.1 medimos el tiempo medio de pasar en el bucle a sobre 0.1ms o 100 microsegundos. Parece ser un circuito muy rápido y reduce al mínimo la posibilidad de múltiples Prensas botón sucede dentro de un circuito simple.

¿Pero, si el lazo es simplemente verificar si debe activar o desactivar un LED, lo que nos dice lo que se supone que debemos para hacer en cualquier bucle determinado?
Perfiles y la máquina de estado del LED

Para manejar los botones y los LED de crear una "matriz de secuencia de estado". Dentro de la matriz se define un perfil. Un ejemplo de un perfil es "Parpadeará rápidamente las luces" o "Encender la luz". Para cada perfil hay una secuencia de Estados (o paso). Por ejemplo en la matriz de int LED_SEQ [], se define un perfil para destellar las luces rápidamente. Ese perfil se compone de las siguientes definiciones de estado:

ALTA, 250, 1, / * perfil 2 (2do lugar) comenzar, paso 0 - "Parpadear rápidamente" * /
BAJO, 250, 0 / * perfil 2, paso 1 * /
0, 0, 0,
0, 0, 0,
0, 0, 0,
0, 0, 0,
0, 0, 0,
0, 0, 0, / * fin del perfil 2, paso 7 * /

Tan un perfil consta de definiciones de estado que tienen valores de 3. El primer valor es una de tres opciones, alta, baja o -1.

ALTO - al entrar en este estado, coche (que el LED o el botón) la salida de alta.
BAJA - al entrar en este estado, la salida hacia bajo.
-1 - al entrar en este estado, no hacer ningún cambio a la salida.

El segundo valor es la longitud de tiempo (en milisegundos) que ese Estado debe ser en efecto antes de pasar al siguiente estado. Tan 2 perfil en el fragmento de código anterior, dice que para mantener el estado 1 de 250ms (o 1/4 segundo) y para mantener también el estado 2 de 250ms.

El tercer valor es el "siguiente paso" o el estado. En el paso de perfil 2 0, el siguiente paso es el paso 1. El siguiente paso después de paso 0 paso 1. Así, vemos que esta secuencia de pasos o de los Estados está en un bucle. paso 0 a paso 1 al paso 0 y así sucesivamente.

Definir una "matriz de secuencia de estado" nos permite cambiar fácilmente el comportamiento de los botones y luces por solo cambiar el "programa" en la matriz de secuencia de fase en lugar de cambiar el código de C. Por ejemplo, experimentamos con la luz comportándose de esta manera:

Primer lugar.-parpadeará una vez y esperar 1 segundo.
Segundo lugar - parpadee dos veces y esperar 1 segundo.
Tercero - parpadea tres veces y esperar 1 segundo.
Cuarto lugar - parpadear cuatro veces y esperar 1 segundo.

En este método con algunas personas les ha gustado un "en sólido", "blink," la prueba "parpadeará lentamente" y "off" como la indicación de 1 º a 4 º lugar respectivamente.

Tenga en cuenta que hicimos esos cambios en el comportamiento de la luz cambiando sólo los perfiles en matriz [] LED_SEQ y no tenemos que cambiar el programa de C en todo!

¿Ahora que vemos cómo el estado (o pasos) se definen, cómo hacer un seguimiento de qué estado están los LEDs de colores diferentes?
Estado de la secuencia de LED

El programa mantiene un seguimiento de Dónde está cada color LED de la "matriz de secuencia de estado" (matriz de int LED_SEQ [] con tres variables:

Primero el "índice de perfil" - Esto es un índice LED_SEQ [] para el perfil (o pasos) que. El índice comienza con cero.
Segundo el "índice de paso" - este es un índice del paso dentro del perfil. El índice comienza con cero.
Tercero y último, el entero largo que sostiene el tiempo que se inició el paso. Este valor se establece en el momento que se quedó un paso de la builin funcion millis().

Estos valores se llevan a cabo en la matriz de [] de grado para cada color. Así que hay 12 entradas. Para cada uno de los cuatro colores hay las 3 secuencia las variables de estado anteriores. Con cuatro colores y tres entradas para cada color, 4 x 3 = 12.

Así que para cada "bucle de sondeo" en nuestro código, el bucle de procesamiento de la máquina de estado LED hace lo siguiente:

Para cada color (de cero a 3)
Busca el perfil actual.
Busca el paso actual
Hora de inicio se ve hasta el paso actual.
Agrega el paso tiempo de duración a la hora de inicio del paso. Si la hora actual es menor que la "duración de paso + hora de salida de paso", entonces no hacer nada. Si la hora actual es mayor que la "duración de paso + hora de salida de paso", luego buscar el siguiente número de paso. Luego realizar la acción del siguiente paso y actualizar el "paso corriente", "perfil actual" y "hora de inicio del paso" índices.

Secuencia de LED

Así, con esta técnica de programa, podemos cambiar los Estados LED en formas complicadas y todavía ver prensa eventos de botón en tiempo y forma. Además, es fácil cambiar la forma de que los LEDS se comportan sin tener que cambiar la lógica del código C. Solo tenemos que cambiar los perfiles y los pasos en la matriz de LED SEQ [].

En realidad se trata de cómo programamos nuestra conducta de "Huevo de Pascua". ¿Le parece? Quieres poner en tu propio comportamiento "Huevo de Pascua". ¡ Adelante, hágalo! El trabajo no está terminado hasta que se realiza el "huevo de Pascua"!
Perfiles y máquina de Estados de botón

El proceso para manipular el comportamiento de botón es exactamente la misma que se describe para los LEDs de arriba. La variable de estado botón"que contiene los"perfiles"y"pasos"o"secuencias"es la matriz de int BTN_SEQ [].

Mismo modo, el perfil actual y el paso para cada color se mantiene en la matriz de [] de larga lBSS.

La discusión para los LEDs entonces se aplica a los botones con la sustitución de las variables arriba del botón.
Flujo general del programa

Se declaran las distintas variables, y se declaran los nombres de las variables para las asignaciones de pines de entrada-salida de Arduino. Véase el apéndice, el código o el esquema de los pines de Arduino utilizado.

El bucle de sondeo luego consta de los siguientes pasos generales:

Busque el botón Pulse y grabar la orden.
Administrar el estado de la secuencia de botón para cada botón de color.
Administrar el estado de la secuencia de LED para cada color LED
Busque el botón de reinicio (y luego restaura la matriz de estado de la secuencia de botón/LED perfil 0 o "off")
Verificar las condiciones especiales de botón de Reset (es decir, llevado a cabo para > milisegundos TEST_MODE, luego entrar en un perfil de modo de "Prueba de las luces".

El manejo de caso especial de los botones para administrar independientemente de luces y sonido con la línea de solo señal se describe con más detalle en la sección sobre botón de modificaciones.

Ver el apéndice para obtener una lista completa.
Extensiones

¿Echamos de menos algo que parece realmente? Por ejemplo, tal vez podría haber un modo de juego "Rueda de la fortuna" también, donde un Color es seleccionado al azar y dado un determinado período de tiempo para responder.

O inventar su propio modo de juego nuevo.

Esa es la belleza de un microcontrolador implemting la lógica. Simplemente crear su propio programa y hacerlo se comportan exactamente de la manera que desea.

Que la programación de Arduino imaginación salvaje y feliz!

La fuente del programa se puede descargar en www.projectnotions.com.

Artículos Relacionados

Sustituyendo la goma del Joystick de un control de Playstation usando Sugru

Sustituyendo la goma del Joystick de un control de Playstation usando Sugru

En mi experiencia Gamer (desde los 4 años de edad), aprendido los controles de Playstation de Sony son de los más duraderos de la industria, y no por nada aún se pueden encontrar controles de la primera consola en buen funcionamiento, pero aún con la
Control de luz usando Arduino con módulo de relé AC

Control de luz usando Arduino con módulo de relé AC

¡ Hola amigos! Soy Ostin, I ll muestran cómo controlar un CA luz con Arduino usando el módulo de relés. Es un proyecto simple y también muy peligroso ya que vamos a tratar con alto voltaje 220v. No trate de si eres un aficionado en el trato con alto
Control de Servos usando el controlador de servos SSC-32 y Arduino Uno

Control de Servos usando el controlador de servos SSC-32 y Arduino Uno

hay dos maneras que usted puede controlar servos utilizando un controlador de servos SSC-32. O bien puede hacerlo directamente desde el lince SSC-32 Terminal o a través de comandos serie enviados una placa de arduino. Aquí, vamos a ver cómo controlar
Luces de cama de Arduino! [Fade led Control con un botón]

Luces de cama de Arduino! [Fade led Control con un botón]

Hola todo el mundo,Hoy vamos a hacer luces de cama de Arduino! En que se descolora es controlado por un botón!.Cuando presiona el pulsador botón las luces comienza descolorarse adentro y hacia fuera y cuando soltamos el pulsador entonces luces de par
Sable de luz definitiva luces y sonidos

Sable de luz definitiva luces y sonidos

Este Instructable iniciado como una guía general para cómo agregar luces y sonidos a trajes y apoyos, pero que totalmente me llevaron y terminó con la electrónica y el programa para el sable de luz definitiva.Tiene grandes efectos de sonido, incluyen
Modificar tu sable láser personalizado con luces y sonido

Modificar tu sable láser personalizado con luces y sonido

así que ahí estaba, un Padawan en el camino del Jedi que acababa de crear su sable de luz. El único problema era que la falta de fuerza en mi nueva herramienta... inquietante. Así que para complementar los poderes de la fuerza de mi sable de luz y as
Edificio Christine (con luces y sonido!)

Edificio Christine (con luces y sonido!)

Este Halloween con temas que nuestro partido alrededor de historias de Stephen King y decidimos que un tamaño completo Plymouth Fury de "Christine" sería un gran punto focal. El camino fácil podría implicar ponerse en contacto con un club de coc
MemAxe - juego de memoria de efectos de sonido de 8 bits

MemAxe - juego de memoria de efectos de sonido de 8 bits

esto es Instructable contiene toda la información y código fuente necesita para construir un MemAxe completamente funcional.¿Qué es MemAxe?MemAxe es un juego electrónico que pone a prueba tu memoria haciendo copiar una secuencia de sonidos usando los
Sonido de Arduino Sensor Control

Sonido de Arduino Sensor Control

Control del sensor de sonido de ArduinoVideo de YouTubeDocumentos
Juego el francés puede poder utilizando un Arduino y un zumbador

Juego el francés puede poder utilizando un Arduino y un zumbador

Bonjour!Hacer que tu Arduino el francés puede poder mediante una señal acústica. No pinzas. No se dispara. Es tan directo que resulta tan escandaloso el puede puede implica.Este instructivo cubre información electrónica introductorio y se centra en e
2-jugador Pong juego usando Arduino Uno y matriz de Led 8 x 8

2-jugador Pong juego usando Arduino Uno y matriz de Led 8 x 8

juego clásico Pong en un Arduino Uno y mono-color de 8 x 8 led matriz.Palillos del jugador son controlados por un potenciómetro para cada jugador. Si desea que la palanca para ir a la izquierda, basta girar el potenciómetro a la izquierda.La velocida
Termistor - control del ventilador usando LabVIEW

Termistor - control del ventilador usando LabVIEW

Centros de hospitalidad a menudo calor de la trampa de la electrónica; Esto puede hacer que la temperatura que reduce su vida útil. Este proyecto puede utilizarse para regular la temperatura de un centro de entretenimiento por el creciente flujo de a
Sistema de control de temperatura usando Labview (Atmega32)

Sistema de control de temperatura usando Labview (Atmega32)

RESUMENEste trabajo describe un marco de encendido, sistemas de control de temperatura proporcional y lineal. El diseño e implementación de este proceso se realiza utilizando LABVIEW, el software de banco de trabajo virtual. El proyecto incluye la ad
Arduino Control remoto Bot usando TV remoto

Arduino Control remoto Bot usando TV remoto

Se trata de un Arduino Bot de Control remoto que puede ser controlada mediante telecontrol ordinario.La característica principal de este proyecto es un receptor de infrarrojos TSOP1738, que nos permite utilizar los botones de un mando común.El mismo