Arduino Kyckling Coop Controller (7 / 9 steg)
Steg 7: Koden är limmet
Jag använde den senaste Arduino IDE 1.0 som jag måste säga har varit lysande särskilt som du kan nu programmet använda den ISP programmeraren och inte behöva oroa sig för USB-donglar eller kretsar. En sak jag vill säga du måste bränna stöveln lastat på din tomt ATmega328 chip annars felsökning blir lite av en utmaning som Arduino miljö inte har ställts in korrekt!
Koden har jag sammanställt är 8346 bytes i storlek så du kan använda ATmega168 chip om du har några sparkar runt.
Bibliotek:
Arduino.h - standard och mycket stora biblioteket
DS1302.h - Real time clock bibliotek
LCD4Bit_mod.h - biblioteket medföljer för att stödja LCD/tangentbordet - mycket lik Standard bibliotek
OneWire.h - ger kommunikation till temperatur sonden
Pinut tilldelning och globala variabler:
Det är där du måste ställa in din egen solnedgång och soluppgång beroende på din plats. Vi har sommar besparingar här i Storbritannien men jag bestämde mig att hålla mitt system på GMT vilket innebär att när jag tittar på klockan på sommaren spara tid är det en timme bakom så de solnedgång och soluppgång gånger behöver fastställas.
Setup()
- Uppsättningar Stifttilldelningar för motorn
- Ställer in skärmen bakgrundsbelysning som är avstängd på reset.
- Den nuvarande MotorState är inställd till stopp
- Den översta raden i displayen är initierats med status rubriker.
- På denna punkt kontrollera vi temperaturen för att initiera min/min max inställningar och Visa den.
I koden kommer du att märka en kommenterade ut rutin "set_time()" att ställa in RTC. Detta bör okommenterade för den första tiden programmering så klockan kan ställas. Kommentera ut och reprogramme ATmega328 igen detta sätt om styrelsen återställs eller ytterligare ändringar i koden görs RTC alltid har rätt tid.
Du måste experimentera på inställning till RTC i synk med laptop tid. Jag upptäckte på en Mac-miljö måste du tillåta 40 sekunder för att kompilera och ladda upp för att se tiderna var exakt synkroniserade.
Loop()
- Skriv ut aktuell tid
- Paus för 0,5 sekund så displayen kan läsas.
- Skriva ut de läggdags som i totalt minuter med den ' ^' symbolen framför den.
- Skriv ut den lägsta temperaturen med symbolen 'v' framför den.
- Paus för 0,5 sekund så displayen kan läsas.
- Skriv ut den vak tiden som i totalt minuter med "v"-symbolen framför den.
- Skriva ut högsta temperatur med den ' ^' symbolen framför den.
- Paus för 0,5 sekund så displayen kan läsas.
- Skriv ut aktuell tid
- Kolla på dörren aktiveringen knappen (visas på/av, stänga dörren eller öppna dörren manuellt)
- Ändra tillståndet Motor enligt aktiveringen knappen
- Kontrollera om det är vakna tid om så ange Motor DoorUp
- Kontrollera om det är sängdags om så ange Motor DoorDown
- Medan den statliga Motor är inte 'Stopp' call door_change antingen stänga dörren eller öppna den och Visa status på skärmen
Jag skulle föreslå att du bekantar dig med koden och förhoppningsvis du kan förstå det tillräckligt att göra egna ändringar, dvs ingen temp sond men en LDR istället.
Som ni kan se koden har jag skapat en stat motor variabel som säkerställer åtgärder har slutförts innan huvudloop koden går tillbaka på sig själv.