Stap 10: De geavanceerde code: beschrijving
De code is aanvankelijk ingesteld van een heleboel variabelen en constanten. Het definieert een aantal macro's vooral voor de specifieke opdrachten van de externe Switch. Ik doe dat dus het is makkelijk om te veranderen die op één locatie in het geval dat u verschillende schakelopties gebruikt.
In het configuratiemenu stelt het de seriële poort en de tijd. Het leest vervolgens de EEPROM van de RTC-module om te zien als op de power-ON, sommige verlichting of apparaten moeten worden ingeschakeld en wel. Ik doe dit dus in het geval van een macht onderbreken en opnieuw opstarten, de controller nog weet wat op moeten zijn en wat niet.
De lus controleert het seriële poort voor inbreng (van een bluetooth-module) en actie onderneemt als input wordt gevonden. Als dat niet het bijwerken van de tijd.
Dan in principe is wat het doet doorlopen van een aantal als-instructies om te zien of is het tijd voor wat actie, Switch een apparaat aan of uit
Als een apparaat worden ingeschakeld moet, hij springt naar de overeenkomstige subroutine/functie, stuurt de specifieke opdracht en de statusflag bijgewerkt en schrijft dat aan EEPROM. Het stuurt de specifieke opdracht via een macro zoals "HuiskamerAAN" (Living Room ON). u moet om ervoor te zorgen dat de definitie in de Macro's komt overeen met de opdracht waarvoor u uw afstandsbediening-switch.
Excuses voor het houden van de macro definities in het Nederlands, maar ik reeds gebruikt de Engelse term voor de functies: dat wil zeggen de functie 'LivingRoomON' gebruikt de macro "HuiskamerAAN". Onder de macrodefinities vindt u precies wat is wat in het Engels.
Terwijl het is strik, ook voortdurend als dit misschien nog de juiste datum voor DaylightSavingstime of, als dit nog DST, door het programma controleert, of het nu gaat om de juiste datum uit te schakelen die.
Ook houdt het spoor van welke datum het is dus een onderlinge aanpassing van de zonsondergang en zonsopkomst tijd kan doen. Zal het overschakelen op het licht in de woonkamer ongeveer de helft een uur voor zonsondergang, tenzij het al donker eerder (regen, donder, wat dan ook), dan zal overschakelen op de lichten vroeg.
Het doet dit door het lezen van een LDR. U moet het niveau voor die instellen op uw eigen situatie.
Met betrekking tot de berekening van de DST en Sunrise onderlinge aanpassing, gelden deze voor mijn locatie (in NW-Europa) dat u wilt aanpassen die voor uw situatie (en u hebt misschien geen DST)
Met betrekking tot de tijdvariabelen een oproep zoals "now.minute()" leest de RTC meteen.
Maar ik de lus voortdurend actualiseren van de tijdvariabelen als volgt laat:
j = now.year();
ma = now.month();
d = now.day();
h = now.hour();
m = now.minute();
s = now.second();
Het is dus in het hele programma OK 'h' of 'now.hour()' gebruiken om het uur.
Het enige verschil is dat met behulp van de 'h' zal waarschijnlijk een tadd sneller dan met behulp van 'now.hour()' maar 'h' is wellicht een fractie van tijd achter. Ik denk dat de lus wordt gefietst over 150 keer per seconde dus als ik de variabelen aan het begin van de lus update en gebruik ze tegen het einde van de lus, kan ik 1/150 th van een tweede achter. Dat lijkt niet echt als een probleem voor mij