Paso 4: Programación del proyecto
Ahora que hemos completado lo cableado nuestro proyecto es hora de escribir código. Estoy incluyendo todo el código a continuación, pero hablará sobre la teoría un poco primero.El código que he proporcionado se compila a 1560 bytes de tamaño. Los mangos de Arduino programas hasta 14336 bytes de tamaño. Toma este proyecto poco más del 10% de la capacidad de Arduino, pero realmente no es código óptimo. Es un tutorial, por lo que he tratado de ser claro y más eficiente. Yo no estaría en absoluto sorprendido de encontrar que podría reescribirse en la mitad del espacio o menos.
Cada "dibujo" de Arduino tiene dos áreas obligatorias: configuración y lazo. Programa de instalación ejecuta una vez después de que el programa se inicia. Esto le permite configurar el estado inicial de la Junta: que pines son las entradas, que son salidas y si salidas empiezan alto o bajo. El lazo es la sección del programa executived repetidamente como programa de instalación ha finalizado. No hay "extremo" o "salida" a un programa de Arduino, no hay nada para salir a! Si usted tiene experiencia de programación, inmediatamente Reconocerás el lenguaje utilizado para programar el Arduino es nuestro buen amigo viejo C. Si no es así, usted puede recoger los fundamentos sólo por ir sobre mi y los otros ejemplos en el kit de desarrollo. Muchos tutoriales de C grandes también están disponibles en la web.
Puede copiar y pegar el código en el entorno de desarrollo Arduino, luego verificar y subirlo. Si todo está correcto debería obtener luces de blinky y poder variar la velocidad presionando el botón.
Ahora un desglose por secciones del bosquejo:
1) en primer lugar empezamos por definir algunas variables. Gran parte de esta área es para la comprensión humana y podría omitirse por eficiencia. Por ejemplo, he definido una variable llamada "ledPinRed" y ponerlo igual a 13 (utilicé tres colores de LED, el rojo uno está conectado al pin digital 13). Podría utilizar "13" directamente a través del programa, pero que hace mucho más difícil de comprender. Los comentarios al lado de las variables tenga en cuenta lo que cada uno es para el.
2) configuración. Aquí he marcado el pin al que está conectado el pulsador como un pin de entrada. El Arduino se busca para recibir información (señales de alto o bajo) allí. Yo he marcado las conexiones del LED a ser salidas donde la Junta establecerá la tensión como alto o bajo (5V o 0V) según el caso. Por último, encendí mi verde conducido y que los otros fueron dados vuelta apagado.
3) getButton: una función (sólo un contenedor para el código para cualquier no-programadores leyendo esto) que puede llamarse desde el bucle principal para saber si hemos presionado el botón. Realiza un seguimiento de la situación actual de la tecla y el estado previo del botón de la última vez miró. Esto nos permite responder sólo al pulsar un botón individual: mantener pulsado el botón sólo cuenta como una prensa. Esto es importante cuando las luces están cambiando muy rápidamente para no ser muy difíciles de controlar.
4) changeLights: otra función. Éste se llama cada vez que tenemos que pasar de un LED a la siguiente. Que está en consigue apagado y otro en secuencia consigue encendido. También actualiza la variable "currentLED" por lo que podemos hacer un seguimiento de que LED es actualmente activo.
5) bucle: el bucle principal. Aquí primero hacemos una llamada para comprobar en el botón. Si nos encontramos no se presiona el botón pero ahora, agregamos a la variable "currentSpeed". Si vamos muy rápido, nos restablecer currentSpeed a 1--bucle alrededor, así que podemos volver a bajas velocidades. Después de eso...
... bueno, entonces nos golpeó una fea línea que determina si es tiempo de cambiar a la siguiente LED. Millis() es una función incorporada de Arduino que realiza un seguimiento de cuánto tiempo la Junta ha estado funcionando el programa actual. Lo que estamos haciendo aquí es averiguar si ha pasado suficiente tiempo que deberíamos cambiar a la siguiente luz. Si es así, llamamos a la función "changeLights" para hacer que suceda.
Finalmente, aquí está el código (ADVERTENCIA: pierde un poco de formato cuando sea publicado aquí, por lo que no es tan bonita como podía ser):
/*
- Tutorial de Arduino de Kevin
*
- Este software está diseñado para ser utilizado con mi Arduino All-in-One Getting Started guía
- más en
*
*/
Tenga en cuenta que estas variables son todos GLOBAL en su alcance, por lo que va a trabajar dentro de nuestras llamadas de función
int ledPinRed = 13; Establecer salidas digitales de LEDs
int ledPinYellow = 12;
int ledPinGreen = 11;
int switchPin = 2; Creado para leer el estado del interruptor de entrada digital 2
int currentLED = 1; Verde = 1, amarillo = 2, rojo = 3
currentSpeed int = 1; Se determina cómo rápidamente cambiar entre luces.
int buttonWas = 0; El estado del interruptor (empujado = 1, no = 0) última vez vimos
buttonIs int = 0; Estado actual del interruptor de
temporizador larga sin signo = 0; Un temporizador para hacer un seguimiento de donde estamos.
void setup() / / ejecuta una vez, cuando empieza el programa ("boceto")
{
pinMode (switchPin, entrada); Dice el Arduino para tratar la switchPin como entrada
pinMode (ledPinRed, salida); Dice el Arduino que el pin del LED rojo es para la salida
pinMode (ledPinYellow, salida);
pinMode (ledPinGreen, salida);
digitalWrite (ledPinGreen, HIGH); El LED verde está encendido al inicio
digitalWrite (ledPinRed, bajo); LED rojo está apagado al inicio
digitalWrite (ledPinYellow, bajo); LED amarillo está desactivada al inicio
}
void getButton() {/ / vamos a ver lo que el botón está haciendo, ¿vamos?
buttonWas = buttonIs; Establecer el estado antiguo del botón para que el estado actual ya que estamos creando un nuevo estado actual.
buttonIs = digitalRead(switchPin); Leer el estado de botón
}
void changeLights() {/ / apagar el LED actualmente encendido y encender otro.
Timer=Millis(); restablecer el temporizador de nuestro a la hora actual
{if(currentLED==1)}
digitalWrite (ledPinGreen, bajo);
digitalWrite (ledPinYellow, HIGH);
}
{if(currentLED==2)}
digitalWrite (ledPinYellow, bajo);
digitalWrite (ledPinRed, HIGH);
}
{if(currentLED==3)}
digitalWrite (ledPinGreen, HIGH);
digitalWrite (ledPinRed, bajo);
}
currentLED ++; Agregar a currentLED
Si (currentLED == 4) {currentLED = 1;}
}
void loop() / / este es nuestro circuito "principal". Programas de Arduino no salir, no para salir a!
{
getButton();
if((buttonIs==1) & &(buttonWas==0)) {}
currentSpeed ++; Agregar a la actual demora porque presionó el botón.
if(currentSpeed==15) {currentSpeed = 1;} / / lazo alrededor, esto nos hace volver a una rotación lenta.
}
Si (millis() > =timer+(1000/currentSpeed)) {/ / tiempo para cambiar las luces!
changeLights();
}
}