Étape 7: codage !
Codage est une des parties plus agréables de ce projet ensemble. Comme indiqué précédemment, l’IDE Arduino a été utilisé pour le codage, qui a grandement simplifié le processus. Une fois que vous avez un programmeur mis en place et avez votre logiciel prêt à partir, vous êtes prêt à se taper ! Ou copier et coller, le cas échéant. :)
Cela ne sera pas long, mais j’espère elle aussi aider et si rien d’autre, susciter un intérêt dans le codage. J’ai joint le fichier de .ino Arduino, ainsi que le lien PastBin avec les numéros de ligne. Je vais aussi aller à travers généralement ce que fait chaque bit du code.
Ce code suppose que vous utilisez le schéma présenté à l’étape 3.
Tout d’abord, lignes 1-11 ensemble certaines variables qui seront utilisées tout au long du programme. C’est pour la plupart des choses générales comme qui les entrées/sorties correspondent à quels numéros, le taux au cours de laquelle l’arc en ciel devrait s’estomper et le seuil de détection de la lumière devrait répondre aux. Je vais arriver à lignes 8-11 dans un instant.
Lignes 13-18 simplement mis en place toutes les quilles comme sorties (la broche du capteur de lumière est appliquée par défaut). Ligne 17 modifie la couleur est complètement désactivé, à l’aide de la fonction décrite dans le paragraphe suivant.
Lignes 49-53, la fonction changeColor(), fournissent la base pour ce programme. Fondamentalement, la fonction prend une valeur de 0 à 255 pour la valeur de lumière individuelle pour chaque couleur et puis l’écrit dans le code pin correct, en utilisant le signal PWM évoquée précédemment. Cependant, étant donné que mon voyant est commun-anode (positif commun), donc la valeur 0 (off/sol) signifie que la couleur sera sur son intensité maximum. Ainsi, pour créer l’effet désiré, où 255 indique son intensité maximum, les couleurs sont soustraites de 255 pour les inverser.
Remontant le programme, la fonction loop() commence à la ligne 20. Après cela, lignes 21 à 27 vérifier pour voir si il fait sombre à l’aide de la valeur de seuil définie dans la section variables. L’if/else instruction comporte la fonctionnalité supplémentaire de vérifier si la variable sombre est déjà définie - si il fait déjà sombre, alors que le programme ne sera pas mis à être sombre à nouveau.
Ligne 26 appartient à la partie plus compliquée et plus impressionnante de ce programme. Je ne voulais pas ma lumière clavier reste allumée toute la nuit (parce que je suis rarement place à 03:00 sur l’ordinateur), alors j’ai décidé d’ajouter un certain pizazz avec une fonction d’arrêt automatique. J’ai dû essayer plusieurs angles d’aborder le problème avant que j’ai trouvé un qui a fonctionné. Les fonctions de temps écoulé ne semblent pas faire le travail, et comme le ATTiny n’est pas une horloge en temps réel, je ne pouvais pas il suffit de lire l’heure. Ce système fonctionne en calculant le temps qu’il faut faire un arc-en-ciel en ligne 8. Puis, basé sur le nombre d’heures entrée I comme le temps, sur que la lumière doit rester, il calcule des arcs-en-ciel combien il devrait terminer une fois tombée. L’if instruction avant que le programme principal ranbow (ligne 28) vérifie si elle est sombre et vérifie également que le programme a encore plus d’arcs-en-ciel d’exécuter. Ligne 41 incrémente le compteur de chaque arc en ciel. Et enfin, ligne 26 réinitialise le compteur de cycles arc-en-ciel quand il devient lumière.
Cela démontre la puissance incroyable du code. En ajoutant simplement quelques lignes de texte à un programme, vous pouvez ajouter des fonctionnalités étonnantes qui seraient presque impossible de faire avec le matériel. C’est une des raisons pour lesquelles que j’aime tellement de programmation. Cela me permet de mettre mes idées en action dans un monde où la seule vraie chose me limitant est mon imagination.
Pour conclure cette explication de confiseurs, lignes 29-40 défiler toutes les couleurs de l’arc-en-ciel. Fondamentalement, le code arc-en-ciel travaille en commençant par une couleur (rouge par exemple) à pleine intensité. Puis, la boucle graduellement descend la valeur rouge et déplace la valeur verte vers le haut, jusqu'à ce que vert est à pleine intensité. Le processus se répète jusqu'à ce que le bleu s’évanouit et une fois de plus, le rouge est la couleur dominante. La dernière partie du programme est l’instruction else en lignes 43-46, ce qui éteint la lumière, si ce n’est pas sombre ou s’il a siégé pendant plus de 8 heures (la variable timeout_hours).