Étape 3: codage
Dans un premier temps logique semblait simple : si il fait sombre et il y a mouvement - Allumez l’appareil (lampe dans mon cas), sinon le désactiver. Patientez n et vérifier de nouveau.
Mais comme je testais et ajout de nouveaux modes à mon appareil, ci-dessus mentionné travaillé si simple.
Vous ne pouvez pas utiliser si (sombre == true & & mouvement == true) alors {allumez} else {éteindre;} retard (n) ;
parce que vous obtiendrez un effet de rétroaction méchant : sombre ? -Oui, mouvement ? -Oui, puis allumez-le ; attendre ; sombre ? -non (car nous avons juste allumé les lumières), mouvement ? -Oui, puis il s’éteint ; sombre ? -Oui... Donc avec cette logique vous obtiendrez constante clignotant.
C’est pourquoi dans la procédure light_on() tout d’abord, nous vérifions si c’est sombre et ensuite aller dans la boucle, allumer la lumière et vérifier constamment si le mouvement est présent. Nous ne vérifions pas ces deux conditions simultanément.
En ce qui concerne le délai de commande (n), qui suspend l’exécution n millisecondes, nous ne pouvons utiliser parce qu’au cours du délai, si vous appuyez sur les boutons mode permanent ou manuel, Arduino ne remarque pas, parce qu’il dort. C’est pourquoi nous utilisons dans le même arceau, qui vérifie pour motion dans light_on () procédure, fonction millis() et affecter sa valeur à la variable "maintenant". Millis() retourne le nombre de millisecondes écoulées depuis l’Arduino a été activée. Cette façon nous sommes en mesure de sortir de la boucle quand maintenant + delay_time > millis().
Ainsi, toutes les conditions pour sortir de boucle dans la procédure light_on() :
- Il n’y a pas de mouvement ;
- delay_time s’est écoulé depuis la dernière fois en mouvement a été détecté ;
- mode de périphérique a été changé en appuyant sur un des boutons.
Autres commentaires que j’ai inclus dans le code lui-même.
J’ai fait deux classes : cellule photoélectrique et pir.
Bouton debouncing j’utilise Bounce2 bibliothèque que vous pouvez télécharger depuis ici. Télécharger Bibliothèque et décompressez son contenu dans ~/Documents/Arduino/libraries (sur un Mac) ou My Documents\Arduino\libraries (sur une machine Windows).
PHOTOCELL.h
PIR.h
C’est tout le code dont vous avez besoin. Maintenant, vous pourrez le télécharger à votre Arduino et un essai, si tout fonctionne comme il se doit, avant traitant de haute tension et en assemblant les cas pour votre appareil.
Aussi, j’ai joint les fichiers avec les codes. Sur ma machine tout compile sans problème.