Étape 4: Piloté par Menu - Code
Tel que mentionné précédemment j’ai utilisé une bibliothèque système de menu LCD produite par Dr Lui - cette bibliothèque est appelée PHI_Prompt. La raison de ce choix est que je voulais la possibilité d’utiliser un simple commutateur rotatif pour sélectionner certaines variables dans le programme et les changer à une gamme avec le préfixe. Par exemple, pour chaque mois je peux maintenant manuellement définir le haut et vers le bas de la porte de temps en utilisant le système de menu.
Je ne vais pas aller trop en profondeur en expliquant le code juste les nouveautés - tout le reste est semblable au code précédent dans la première version.
Lorsque vous ouvrez Chicken_Coop_Controller_v2 vous êtes présenté avec cinq onglets :
- Chicken_Coop_Controller_v2
- Coop_Control
- Coop_Menu
- CCF
- TempProbe
Chicken_Coop_Controller_v2
Les étiquettes principales définitions utilisées dans le code sont ici, y compris le mappage de caractères requis par le système de menu. Si vous deviez décider de se retirer à l’aide d’un commutateur rotatif, vous pouvez utiliser clavier LCD précédent (réseau analogique restauration) à la place. Si vous lisez le manuel PHI, il explique comment vous pouvez modifier l’entrée et la sortie sans beaucoup de modification au code - cleaver très.
Variables globales et les bibliothèques sont également définis ici. Le programme est initialisé et la fonction top_menu() est appelée pour démarrer le système qui se met automatiquement en « exécuter en mode ».
Coop_Control
Il s’agit ont été la majeure partie de la logique de contrôle se trouve lorsque les options de menu « RunController » est sélectionné. Les valeurs par défaut pour la porte et descendre fois sont définies. Cette version fonctionne désormais en heures et minutes - alors fois sont mis heure, minute, plutôt que nombre total de minutes que je connais n’a confondu les gens. Dans cette section, j’ai aussi ajouté la logique (SetFlashOn) qui provoque une LED s’allume dès que la porte ferme correctement et clignote lorsqu’il y a un problème lors de l’ouverture et la fermeture
Coop_Menu
Voici où la structure et la configuration pour le siège de Coop_menu :
- Exécutez le contrôleur
- Heure/date
- Ensemble porte fois
- Porte vers le haut
- Porte vers le bas
- Paramètres de porte
- Sur
Pour chaque sélection de menu, il y a une fonction d’appel local qui appelle ensuite sur les fonctions Coop_Control. Cette section est relativement simple - j’espère bien !
J’ai ajouté une fonctionnalité de sécurité intégrée à la porte vers le bas et les options qui garde une trace de combien de temps ces fonctions ont été diffusées. S’ils vont au-delà des paramètres sélectionnés (MotorFailSafe) puis le moteur est arrêté.
CCF
Ce code a été significativement modifié afin qu’il fonctionne avec la bibliothèque DS1307. J’ai aussi ajouté la logique de conversion British Summer Time (CEST). En haut de ce code, j’ai créé quand les horloges vont vers l’avant et en arrière de 7 ans. Lorsque le code va à l’impression le temps il vérifie s’il faut ajouter une heure sur la norme Greenwich Mean Time (GMT). Ce code aussi imprime la porte close, le temps ouverts et le définit l’heure actuelle pour utilise ailleurs dans le code.
Dans ce code, vous pouvez également définir la date en utilisant le code d’entrée de menu et Coop. Vous êtes la force pour régler la durée d’abord en tournant et en cliquant sur l’heure et minute puis.
TempProbe
Ce code est très semblable au code précédent au contrôleur d’origine. Il lit une sonde de température OneWired et convertit en une lecture centigrade, alors affichées et comparée aux lectures précédentes pour voir si c’est un minimum ou de la lecture maximale. Dans l’affirmative, il est stocké. Les lecteurs minimales et maximales sont affichés aussi alors
J’ai mis à jour le logiciel de fonctionner avec le nouvel environnement Arduino 1.6.6. Je reçois un avertissement quand il compile, mais tout semble être ok. Si vous avez des problèmes me déplacer une ligne.