Stap 4: Menu Driven - Code
Zoals eerder vermeld ik gebruikte een LCD-menu systeem bibliotheek geproduceerd door Dr Lui - deze bibliotheek is genaamd PHI_Prompt. De reden voor deze keuze is dat ik de mogelijkheid om met een eenvoudige draaiknop kunt selecteren bepaalde variabelen binnen het programma en verander hen in een vastgestelde reeks wilde. Bijvoorbeeld voor elke maand kan ik nu handmatig de zetten en omlaag deur tijden met behulp van het menusysteem.
Ik ga niet naar te veel diepte in termen van het uitleggen van de code alleen de nieuwe functies - alles is vergelijkbaar met de bovenstaande code in de eerste versie.
Wanneer u Chicken_Coop_Controller_v2 open wordt u aangeboden met vijf tabbladen:
- Chicken_Coop_Controller_v2
- Coop_Control
- Coop_Menu
- RTC
- TempProbe
Chicken_Coop_Controller_v2
De belangrijkste etiketten definities die gebruikt worden in de code hier zijn met inbegrip van de tekenomzetting vereist door het menusysteem. Mocht u besluiten om opt-out met behulp van een roterende schakelaar kon u het vorige LCD toetsenbord (analoge herstellen netwerk) gebruiken. Als je de PHI handleiding leest legt uit hoe u kunt wijzigen de input en output zonder veel aanpassingen aan de code - zeer cleaver.
Globale variabelen en bibliotheken zijn ook die hier zijn gedefinieerd. Het programma is geïnitialiseerd en vervolgens de top_menu()-functie wordt opgeroepen om te beginnen met het systeem dat automatisch gaat in 'run modus'.
Coop_Control
Dit is het grootste deel van de controle-logica zit waren toen de 'RunController' menu-opties is geselecteerd. De standaardwaarden voor de deur op en neer keer zijn ingesteld. Deze versie werkt nu in uren en minuten - dus tijden zijn ingesteld uur, de minuten in plaats van totaal aantal minuten waarvan ik weet dat mensen verwarren. In dit gedeelte heb ik ook toegevoegd de logica (SetFlashOn) waardoor een LED te komen wanneer de deur wordt goed gesloten en knippert wanneer zich een probleem voordoet bij het sluiten en openen
Coop_Menu
Hier is waar de structuur en configuratie voor de Coop_menu zit:
- Uitvoeren van Controller
- Tijd/datum instellen
- Set deur tijd
- Deur omhoog
- Deur naar beneden
- Parameters van de deur
- Over
Voor elke keuze in een menu is er een lokale oproep functie die vervolgens op de Coop_Control-functies roept. Deze sectie is betrekkelijk eenvoudig - Nou ik hoop dat!
Ik heb een failsafe-functie toegevoegd aan de deur omlaag en omhoog opties die houdt van hoe lang deze functies hebben gelopen. Als ze verder gaan dan de ingestelde parameter (MotorFailSafe) wordt dan de motor afgesloten.
RTC
Deze code is aanzienlijk gewijzigd zodat het werkt met de DS1307-bibliotheek. Ik heb ook Britse zomertijd (BST) conversie logica toegevoegd. Aan de bovenkant van deze code heb ik 7 jaar wanneer de klokken gaan vooruit en achteruit. Wanneer de code gaat naar de tijd afdrukken wordt gecontroleerd of het moet toevoegen van een uur op standaard Greenwich Mean Time (GMT). Deze code ook afdrukken de deur dicht en open tijden en sets de huidige tijd voor gebruik elders in de code.
In deze code kunt u ook de Coop tijd en datum met behulp van het menu input code instellen. U bent de kracht om tijd eerst ingesteld door roteren en op het uur te klikken en vervolgens minute.
TempProbe
Deze code is zeer vergelijkbaar met de bovenstaande code in de oorspronkelijke domeincontroller. Het leest een OneWired temperatuursonde en zet in een heeft lezen, wordt weergegeven en vervolgens vergeleken met de vorige lezingen om te zien of het een minimale of maximale lezing. Als dat zo is opgeslagen. De minimale en maximale lezers worden ook dan weergegeven
Ik heb bijgewerkt de software uit te voeren met de nieuwe Arduino 1.6.6-omgeving. Ik krijg een waarschuwing wanneer gecompileerd maar alles schijnt o.k.. Hebt u stuur problemen me een lijn.