Paso 4: Arduino programa
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.