Étape 10 : Le code avancé : description
Le code définit initialement beaucoup de variables et constantes. Elle définit un certain nombre de macro en particulier pour les commandes de commutateur distant spécifiques. Je le fais qu’il est facile de changer ces sur un seul site dans le cas où vous utilisez différents commutateurs.
Dans la configuration, il met en place le port série et le temps. Il lit ensuite la mémoire EEPROM du module RTC pour voir si à la marche, certains feux ou dispositifs devraient être mis en marche et qu’il le fasse. Je le fais cela dans le cas d’une interruption de l’alimentation et le redémarrage, le contrôleur sait toujours ce qui devrait être sur et ce qui pas.
La boucle vérifie le Port série pour l’entrée (partir d’un module bluetooth) et intervient si entrée n’est trouvée. Si ce n’est pas le cas, il met à jour l’heure.
Alors fondamentalement ce qu’il fait est cycle à travers un certain nombre d’instructions IF pour voir si il est temps pour l’action, commutateur un dispositif ON ou OFF
Si un appareil doit être mis en marche, il grimpe à la sous-routine/fonction correspondante, il envoie la commande spécifique et il met à jour la statusflag et qui écrit dans l’EEPROM. Il envoie la commande spécifique via une macro telle que "HuiskamerAAN" (salon ON). vous devez vous assurer que la définition de la Macro correspond à la commande qui a besoin de votre télérupteur.
Excuses pour garder la macro définitions en Néerlandais, mais j’ai déjà utilisé le terme anglais pour les fonctions : c'est-à-dire la fonction « LivingRoomON » utilise la macro « HuiskamerAAN ». Selon les définitions de Macro, vous trouverez exactement ce que ce qui est en anglais.
Alors que c’est une boucle, le programme aussi continuellement vérifie s’il est peut-être déjà la bonne date pour DaylightSavingstime ou, si elle est déjà DST, que ce soit la bonne date qu’éteindre.
Il fournit également des quelle date c’est alors qu’il peut faire une approximation du temps coucher et le lever du soleil. Il s’allume la lumière dans le salon près de la moitié une heure avant le coucher, à moins qu’il fait déjà sombre plus tôt (ciel couvert, tonnerre, peu importe), puis il s’allume les lumières plus tôt.
Il fait ceci en lisant une LDR. Vous devez définir le niveau pour cela à votre propre situation.
En ce qui concerne le calcul de la DST et rapprochement de Sunrise, ceux-ci sont valables pour mon emplacement (au NW de l’Europe), il faut adapter ceux à votre situation (et peut-être que vous n’avez pas de DST)
En ce qui concerne les variables de temps comme un appel "now.minute()' lit le CCF tout de suite.
Mais j’ai laisser la boucle constamment mettre à jour les variables de temps comme ceci :
j = now.year() ;
Mo = now.month() ;
d = now.day() ;
h = now.hour() ;
m = now.minute() ;
s = now.second() ;
C’est donc OK pour utiliser « h » ou « now.hour() » pour obtenir l’heure tout au long du programme.
La seule différence est qu’à l’aide de « h » sera probablement un tadd plus rapidement qu’avec un « now.hour() », mais « h » pourrait être une fraction de temps derrière. Je pense que la boucle est à vélo environ 150 fois une seconde sorte si je mettre à jour les variables au début de la boucle et les utiliser vers la fin de la boucle, j’ai peut-être 1/150 ème d’un second derrière. Cela ne semble pas vraiment comme un problème pour moi