Paso 4: Menú conducido - código
Como se mencionó anteriormente utiliza una biblioteca de sistema de menú LCD producida por Dr Lui - esta librería se llama PHI_Prompt. La razón de esta elección es que deseaba que la habilidad de usar un simple interruptor rotativo para seleccionar ciertas variables dentro del programa y cambiar a una gama con prefijo. Por ejemplo para cada mes ahora puedo manualmente ajustar el y abajo puerta veces usando el sistema de menús.
No voy a entrar en demasiada profundidad en cuanto a explicar el código a las nuevas características, todo lo demás es similar al código anterior en la primera versión.
Al abrir Chicken_Coop_Controller_v2 se presentan con cinco pestañas:
- Chicken_Coop_Controller_v2
- Coop_Control
- Coop_Menu
- RTC
- TempProbe
Chicken_Coop_Controller_v2
Las etiquetas principales definiciones utilizadas en el código están aquí incluyendo la asignación de carácter requerida por el sistema de menú. Si usted decidiera optar hacia fuera usando un interruptor rotatorio podría utilizar en su lugar el anterior teclado LCD (red de restauración analógica). Si lees el manual PHI explica cómo se pueden cambiar la entrada y salida sin mucha modificación al código - cuchilla muy.
Las bibliotecas y las variables globales también se definen aquí. El programa está inicializado y entonces se llama a la función top_menu() para iniciar el sistema pasa automáticamente al 'modo de ejecución'.
Coop_Control
Esto es eran la mayor parte de la lógica de control se sienta cuando se selecciona las opciones de menú 'RunController'. Se fijan los valores por defecto para la puerta arriba y abajo veces. Esta versión ahora funciona en horas y minutos, así que veces son horas, minutos más minutos total que sé confundir gente. En esta sección también he añadido la lógica (SetFlashOn) que hace que un LED se enciende cuando la puerta se cierra correctamente y parpadea cuando hay un problema al abrir y cerrar
Coop_Menu
Aquí es donde la estructura y configuración de las Coop_menu que se sienta:
- Funcionamiento controlador
- Cambiar hora/fecha
- Conjunto puerta epoca
- Puerta ascendente
- Puerta abajo
- Parámetros de puerta
- Acerca de
Para cada selección del menú hay una función llamada local que a continuación, llama a las funciones de Coop_Control. Esta sección es relativamente sencilla - bien espero!
He agregado una característica a prueba de fallos a la puerta hacia abajo y las opciones que realiza un seguimiento de cuánto tiempo estas funciones han puesto en marcha. Si van más allá del conjunto de parámetros (MotorFailSafe) entonces el motor se apaga.
RTC
Este código ha sido modificado significativamente para que funcione con la biblioteca del DS1307. También he añadido lógica de conversión de hora de verano británico (BST). En la parte superior de este código he creado 7 años cuando los relojes van hacia adelante y hacia atrás. Cuando el código se va a imprimir el tiempo comprueba si necesita agregar una hora en el estándar medio de Greenwich tiempo (GMT). Este código también imprime el cierre de la puerta y veces abiertas y fija el tiempo actual para utiliza en otros lugares en el código.
Este código también puede establecer la fecha utilizando el código de entrada del menú y la Coop. Eres fuerza tiempo primero girando y haciendo clic en la hora y minutos después.
TempProbe
Este código es muy similar al código anterior en el controlador original. Lee un sensor de temperatura OneWired y convierte en una lectura grados centígrado, entonces muestra y compara con lecturas previas para ver si es un mínimo o lectura máxima. Si es así, se almacena. Los lectores máximos y mínimos se muestran también
He actualizado el software se ejecute con el nuevo entorno de Arduino 1.6.6. Me sale una advertencia cuando compila, pero todo parece estar bien. Si tienes algún problema mándenme una línea.