Étape 2: Le programme a expliqué
Tout d’abord je tiens à souligner que je ne suis pas très bon à la programmation, mais j’ai amélioré ! Ma première tentative à une horloge binaire a été très longue haleine, et j’ai réussi à améliorer le code considérablement.
Donc la première chose à que faire est lire le temps, ce qui est très facile.
(RTC.read(tm))
Ensuite, le bit suivant est de prendre chaque valeur et diviser en unités et dizaines et si la valeur est inférieure à 10 puis faire les dizaines de valeur zéro. Cette routine est exécutée 3 fois pour les heures minutes et secondes.
Sub binaryOutput(int number)
{
Si (nombre > = 10)
{
int dizaines = nombre/10 ;
les unités int = nombre - (RTE * 10) ;
setBinary(units,ROW) ;
LIGNE = LIGNE + 1 ;
setBinary(tens,ROW) ;
}
d’autre
{
des dizaines d’int = 0 ;
les unités int = nombre ;
setBinary(ROW,units) ;
LIGNE = LIGNE + 1 ;
setBinary(ROW,tens) ;
}
}
Vous devriez être capable de voir que, une fois que vous avez divisé le nombre en dizaines et unités vous exécutez ensuite une autre routine pour afficher la valeur dans une colonne. Cette routine prendre 0-9 Numéro et il convertit un nombre binaire et tourne sur (et hors) les LED requis
Cette partie du programme était le peu qui ont amélioré beaucoup de la dernière tentative ! essentiellement, chaque ligne est traitée la même indépendante du nombre de LED dans la ligne. ce qui signifie que les lignes d’unités ont 4 LEDs et l’heure des dizaines seulement a deux LED mais fonctionne cependant la même routine, le Funduino ne sait pas qu’il n’est pas une LED en position et aucunement les LED inutilisés pourrait être définie à off.
setBinary nulle (valeur int, int whichRow)
{
LIGNE = whichRow ;
int XYZ = 8 ;
int COL = 3 ;
pour (int i = 0; j’ai 4 <; i ++)
{
getColor(g) ;
Si (valeur > = XYZ)
{
Colorduino.SetPixel(ROW,COL,A,B,C) ;
valeur = valeur - XYZ ;
}
d’autre
{
Colorduino.SetPixel(ROW,COL,0,0,0) ;
}
XYZ = XYZ / 2 ;
COL = COL - 1 ;
}
}
Alors, comment fonctionne ce morceau de code?? La routine est livrée avec deux éléments de données, quelle ligne et le nombre. XYZ est définie initialement à 8 et COL à 3. Puis, vous obtenez le code de couleur et fais 4 boucles, sur chaque boucle vous comparez votre numéro avec XYZ et déterminer si c’est plus, si son plus puis le haut LED devrait être allumé (le nombre 8 conduit!) Puis 8 devrait être déduit de votre numéro. Si ses pas plus que 8 puis le LED du haut doivent être éteint. Dans les deux cas vous puis divisez XYZ par 2 et décrémentez le colonel puis vous en boucle à nouveau ce temps vérifier si votre numéro est supérieur à 4 et ainsi de suite. Voir ci-dessous pour un exemple.
Nombre est 6.
Loop1 (numéro d’entrée = 6, XYZ = 8, Col = 3) elle est égale ou supérieure à 8 ? SANS désactiver les haut decrement, lumière, moitié le XYZ, le col.
Loop2 (numéro d’entrée = 6, XYZ = 4, Col = 2) est-il égal ou plus de 4 ? Oui, allumer la lumière 3ème, soustraire 4 du nombre, la moitié des XYZ et la décrémentation du col.
Loop3 (numéro d’entrée = 2, XYZ = 2, Col = 1) est égale ou supérieure à 2 ? Oui, allumer la lumière 2e, soustraire 2 à partir du nombre, la moitié des XYZ et la décrémentation du col.
Loop4 (numéro d’entrée = 0, XYZ = 1, Col = 0) est égale à ou supérieure à 1 ? SANS éteindre la lumière du bas, la moitié le XYZ et décrémenter le Col
À ce stade vous incrémentez la réinitialisation de la rangée le XYZ et Col puis faire la même routine pour les dizaines. Puis répétez pour les minutes et les heures.
Enfin pour le code, vous devez alors « Flip » de la page Colorduino pour afficher la nouvelle heure, ou si le temps n’a pas changé puis changer la couleur.
void loop()
{
tmElements_t tm ;
Si (RTC.read(tm))
{
binaryOutput (tm. Seconde) ;
LIGNE = LIGNE + 1 ;
binaryOutput (tm. Minute) ;
LIGNE = LIGNE + 1 ;
binaryOutput (tm. Heure) ;
LIGNE = 0 ;
}
Colorduino.FlipPage() ;
}
Donc qui gère la lecture et l’affichage de l’heure, maintenant nous allons avoir un regard sur les couleurs. Chaque colonne est définie sur une couleur et de la colonne suivante est affectée par une valeur déterminer par « incrément » plus le nombre le mieux les variations de couleur sur les 6 colonnes. J’ai trouvé qu’autour de 8-12 est un bon nombre. Les couleurs sont décidés par une routine qui prend la valeur d’une seule couleur "g" (alors appelée arc-en-ciel) est incrémentée, un autre est décrémenté et le 3ème est remis à zéro, cette cycles puis monte et descend à travers toutes les couleurs et donne un effet sympa arc-en-ciel (voir le graphique pour une meilleure explication). Un seul problème que j’ai eu qui a eu beaucoup de temps à travailler sur la soloution très simple a été comment faire déplacer lentement sur les colonnes de l’arc-en-ciel. parce que j’ai renforcé la couleur entre chaque rang, si je veux maintenant incrémenter chaque colonne par seulement 1 alors je dois prendre en considération ce que le numéro de couleur originale était et réinitialise « g » à ce nombre puis ajoutez une. Je pense que c’est logique.
Donc la dernière chose est comment vous ajuster le temps???
Je ne savais pas vraiment comment j’allais régler cette horloge quand j’ai commencé à construire cette horloge, mais parce qu’il n’y a pas d’entrées disponibles sur le plateau de colorduino, j’ai fait une horloge GPS qui vous pouvez de brancher l’appareil CCF à et de corriger le temps. Je vais ajouter un autre instructable sur comment j’ai fait cela!!