Paso 7: codificación!
La codificación es una de las partes más divertidas de este proyecto. Como se indicó anteriormente, el IDE de Arduino fue utilizado para la codificación, que simplifica muchísimo el proceso. Una vez que un programador de configurar y tiene su software listo para ir, usted está listo para conseguir escribir! O copiar y pegar, según sea el caso. :)
Esto será largo, pero espero también ayudará y si nada más, despertar un interés en la codificación. Os adjunto el archivo .ino de Arduino, así como el enlace de PastBin con números de línea. También voy a generalmente lo que hace cada bit del código.
Este código asume que usted está usando el esquema presentado en el paso 3.
Primero apagado, líneas 1-11 establecer algunas variables que se utilizarán durante el programa. Es sobre todo cosas generales como la que entradas y salidas corresponden a que números, la tasa a la cual debería desaparecer el arco iris y el umbral que el sensor de luz debe responder a. Llegaré a las líneas 8-11 en un momento.
Líneas 13-18 simplemente configurar los pines como salidas (el perno del sensor de luz es de entrada por defecto). Línea 17 cambia de color para ser completamente apagado, usando la función descrita en el párrafo siguiente.
Líneas 49-53, la función de changeColor(), proporcionan la base para este programa. Básicamente, la función toma un valor 0-255 para el valor de luz individual para cada color y luego escribe en el pin correcto, utilizando la señal PWM discutida previamente. Sin embargo, puesto que mi LED es de ánodo común (común positivo), así que un valor de 0 (off/tierra) significa que el color será el brillo completo. Por lo tanto, para crear el efecto deseado donde 255 indica brillo completo, los colores se restan de 255 a invertirles.
Volviendo al programa, la función loop() comienza en la línea 20. Después de eso, líneas 21-27 Verifique si está utilizando el valor de umbral oscuro establecido en la sección de variables. El if/else sentencia tiene la funcionalidad adicional de comprobar si ya está establecida la variable oscura - si ya está oscuro, entonces el programa no establece que sea oscuro otra vez.
La línea 26 es parte de la parte más complicada e impresionante de este programa. No quería que mi luz teclado permanezca encendida toda la noche (porque soy raramente para arriba en el 3:00 en el equipo), así que decidí agregar algunos pizazz con una función de apagado automático. Tuve que probar varios ángulos de abordar el problema antes de que encontre uno que trabajó. Las funciones de tiempo transcurrido no parecen hacer el trabajo, y como el ATTiny no tiene un reloj en tiempo real, que no podía leer el tiempo. Este sistema funciona calculando el tiempo que toma hacer un arco iris en línea 8. Luego, en el número de horas de entrada como el tiempo de que la luz debe permanecer en la base, calcula cuántos arco iris debe terminar después de que oscurezca. If instrucción antes de que el programa de ranbow principal (línea 28) comprueba si es oscura y también comprueba que el programa tiene todavía más arco iris para ejecutar. Línea 41 incrementa el contador de cada arco iris. Y por último, la línea 26 restablece el contador de ciclo de arco iris cuando se convierte en luz.
Esto demuestra el increíble poder de código. Agregando simplemente unas pocas líneas de texto a un programa, puede Agregar funcionalidad increíble que sería casi imposible hacer con el hardware. Esta es una de las razones que me gusta mucho de programación. Me permite poner mis ideas en acción en un mundo donde lo única me limitación es mi imaginación.
Para concluir esta explicación carbonaris, líneas 29-40 ciclo a través de todos los colores del arco iris. Básicamente, el código de arco iris funciona a partir de un color (rojo por ejemplo) en el brillo completo. Entonces, el lazo poco a poco se mueve el valor rojo y sube el valor verde hasta verde es en el brillo completo. El proceso se repite hasta que se descolora hacia fuera azul y el rojo es el color dominante. La última parte del programa es la declaración más en líneas 43-46 que apaga la luz si no es oscuro o si ha estado en más de 8 horas (la variable timeout_hours).