V1.0 Cwik horloge - une horloge binaire Arduino (4 / 15 étapes)

Étape 4: Programmation de l’horloge

Dans cette étape, nous allons créer un programme à télécharger sur le micro-contrôleur ATmega sur la carte Arduino Uno. Le programme équipera le 13 requis LEDs afficher une horloge de 24 heures en binaire. Dans les étapes ultérieures, nous vous inquiétez pas réglage de l’heure, mais pour l’instant, il va toujours commencer à 00:00.

Structure du programme
Arduino programmes ont 2 principales méthodes ; une méthode qui est exécutée une fois au début lorsque l’initialisation est effectuée (appelé setup) et une autre méthode qui est appelée en permanence (appelé boucle).

Dans setup(), nous régler l’heure à 00:00 et mettre en place les épingles vont en voiture le 13 LEDs.

Dans loop() nous allons voir si plus d’une seconde a ellapsed (et dans l’affirmative, incrémentez le temps), puis afficher l’heure en alimentant les LEDs appropriées. La méthode millis() joue un rôle important pour garder le temps. Elle retourne le nombre de millisecondes qui ont ellapsed, comme le circuit est alimenté comme un unsigned long. « Non signé » signifie qu’il ne sera pas négatif et long se réfère à combien de bits (32 pour être exact) est utilisés pour garder une trace de ce nombre (bits correspondent au numéro de chiffres binaires).

La bizarrerie avec millis()
Étant donné qu’un nombre fini de bits dans un unsigned long, à un moment donné nous allons manquer de chiffres ! Selon la documentation Arduino sur millis(), il se terminera autour (c’est à dire, remise à zéro) après environ 50 jours. Comment ennuyeux qui serait d’avoir à nouveau régler votre horloge tous les 50 jours ? Parmi les États de buts, nous sommes la quête de la perfection fonctionnelle et ce comportement perturbe est inacceptable. Ainsi, la logique dans notre méthode tick() est utilisée pour voir quand nous envelopper et continuer sans que personne n’étant le plus sage.

Affectation des broches
Avant de nous lancer en plein et commencer à assigner des broches numériques, nous allons requis une épingle (largeur d’impulsion modulée) de PWM pour afficher les secondes sur le compteur analogique dans une étape ultérieure. Sur l’Arduino Uno, broches, 3, 5, 6, 9, 10 et 11 sont activés pour PWM (comme signifié par le "~"). Donc, je suis sauver broche 11 pour l’affichage analogique et à l’aide de broches 0 - 10, 12 et 13 pour l’affichage à LED binaire.

Le code
/*
Horloge Cwik v1.0 - prototypage l’affichage
Auteur : Dennis Cwik
Date : 23 juillet 2012

Ce programme est le contrôleur pour une horloge binaire, avec LED
attaché à broches numériques entre 0 et 10, 12 et 13.

Cet exemple de code est dans le domaine public.
*/

Ceci peut être modifié faire passer une minute plus rapidement à des fins de débogage.
int ONE_SECOND = 1000 ; mesuré en millisecondes
int DELAY_BETWEEN_LOOP_CALLS = 200 ; mesuré en millisecondes

Je n’est pas venu avec cela, c’est à partir des documents de l’arduino
unsigned long MAX_UNSIGNED_LONG = 4294967295 ; = (2 ^ 32) - 1

1ère colonne de LED
int PIN_MIN1 = 0 ;
int PIN_MIN2 = 1 ;
int PIN_MIN4 = 2 ;
int PIN_MIN8 = 3 ;

2ème colonne de LED
int PIN_MIN10 = 4 ;
int PIN_MIN20 = 5 ;
int PIN_MIN40 = 6 ;

3ème colonne de LED
int PIN_HOUR1 = 7 ;
int PIN_HOUR2 = 8 ;
int PIN_HOUR4 = 9 ;
int PIN_HOUR8 = 10 ;

4ème colonne de LED
int PIN_HOUR10 = 12 ;
int PIN_HOUR20 = 13 ;

la dernière fois les secondes dans le temps ont été incrémenté
unsigned long m_lastTick ;

utilisé pour nous dire si nous allons régler l’heure ou pas
m_inTimeSetMode booléen = false ;

le temps
m_second octet ;
m_minute octet ;
m_hour octet ;

la routine d’installation s’exécute une fois que lorsque vous appuyez sur reset
void setup()
{
initialiser les broches utilisés pour afficher du temps comme sortie
pinMode (PIN_MIN1, sortie) ;
pinMode (PIN_MIN2, sortie) ;
pinMode (PIN_MIN4, sortie) ;
pinMode (PIN_MIN8, sortie) ;
pinMode (PIN_MIN10, sortie) ;
pinMode (PIN_MIN20, sortie) ;
pinMode (PIN_MIN40, sortie) ;

pinMode (PIN_HOUR1, sortie) ;
pinMode (PIN_HOUR2, sortie) ;
pinMode (PIN_HOUR4, sortie) ;
pinMode (PIN_HOUR8, sortie) ;
pinMode (PIN_HOUR10, sortie) ;
pinMode (PIN_HOUR20, sortie) ;

initialiser des variables de l’horloge
m_lastTick = 0 ;
setTime (0, 0, 0) ;
}

la routine de la boucle s’exécute maintes et maintes fois pour toujours
void loop()
{
voir si nous sommes réglage de l’heure, ou laisser l’écoulement du temps normalement
Si (m_inTimeSetMode)
{
getTimeFromPots() ;
}
d’autre
{
Tick() ;
}

maintenant que le temps a été mis à jour, indiquer l’heure
displaySeconds() ;
displayMinutes() ;
displayHours() ;

arbitraires retarder afin que nous ne sommes pas traitement loin 100 % du temps,
un acte d’économie d’énergie
Delay(DELAY_BETWEEN_LOOP_CALLS) ;
}

/**
* Une méthode d’assistance pour définir m_second, m_minute et m_hour.
*/
void setTime (newHour octets, newMinute octets, newSecond octets)
{
m_second = newSecond ;
m_minute = newMinute ;
m_hour = newHour ;
}

/**
* Cette méthode assure le suivi de l’enchaînement logique des temps.  Si assez de temps a
* écoulées depuis la dernière fois qu’on l’appelait, m_second, m_minute et m_hour
* met à jour approprié. Ceci tienne compte de cette millis() rouleaux
* sur à peu près tous les 50 jours.
*/
Sub tick()
{
unsigned long maintenant = millis() ;
unsigned long msElapsed ;

tout d’abord, nous avons besoin de savoir combien de temps s’est écoulé depuis la dernière fois que nous
tick() appelé
Si (maintenant < m_lastTick)
{
le souffle coupé, non plus, nous avons réussi en voyages dans le temps, ou millis() enroulé autour !
msElapsed = (MAX_UNSIGNED_LONG - m_lastTick) + maintenant ;
}
d’autre
{
msElapsed = maintenant - m_lastTick ;
}

pour chaque seconde qui s’est écoulé (si tout va bien juste 1, sauf si notre code est vraiment lag),
Ajouter 1 seconde à la fois et augmenter les minutes et les heures si nécessaire.
pour (int i = 0; i < msElapsed / ONE_SECOND; ++ j’ai)
{
m_lastTick = m_lastTick + ONE_SECOND ;

++ m_second ;
Si (m_second == 60)
{
m_second = 0 ;
++ m_minute ;
Si (m_minute == 60)
{
m_minute = 0 ;
++ m_hour ;
Si (m_hour == 24)
{
m_hour = 0 ;
}
}
}
}
}

Sub displaySeconds()
{
TODO contrôlent l’affichage analogique
}

/**
* Cette méthode lit le m_minute variable, convertit en binaire et affiche
* il des voyants approprié (ceux qui sont PIN_MIN *).
*/
Sub displayMinutes()
{
octet plus = m_minute % 10 ;
digitalWrite (PIN_MIN1, celles & B1) ;
digitalWrite (PIN_MIN2, celles & B10) ;
digitalWrite (PIN_MIN4, celles & B100) ;
digitalWrite (PIN_MIN8, celles & B1000) ;

Division est peu cher, mais nous supposerons que la compilation optimise cela pour nous:)
des dizaines d’octets = m_minute / 10 ;
digitalWrite (PIN_MIN10, dizaines & B1) ;
digitalWrite (PIN_MIN20, dizaines & B10) ;
digitalWrite (PIN_MIN40, dizaines & B100) ;
}

/**
* Cette méthode lit le m_hour variable, convertit en binaire et affiche
* il des voyants approprié (ceux qui sont PIN_HOUR *).
*/
Sub displayHours()
{
octet plus = m_hour % 10 ;
digitalWrite (PIN_HOUR1, celles & B1) ;
digitalWrite (PIN_HOUR2, celles & B10) ;
digitalWrite (PIN_HOUR4, celles & B100) ;
digitalWrite (PIN_HOUR8, celles & B1000) ;

des dizaines d’octets = m_hour / 10 ;
digitalWrite (PIN_HOUR10, dizaines & B1) ;
digitalWrite (PIN_HOUR20, dizaines & B10) ;
}

/**
* Cette méthode lit les valeurs de 2 potentiomètres, convertit à
* mimnutes heures et séries m_minute et m_hour pour les valeurs associées.
*/
Sub getTimeFromPots()
{
TODO lire les potentiomètres, régler l’heure et les minutes
}

Articles Liés

Horloge binaire Arduino

Horloge binaire Arduino

Je l'ai enfin fait, l'horloge binaire les gens autour de moi m'a entendu parle depuis si longtemps. Je tentais de faire cela pendant la pause de Noël dernier, mais manquait à l'époque, j'ai changé d'emploi 2 fois dans les 6 derniers mois... donc les
Horloge binaire Arduino à l’aide de la matrice de LED

Horloge binaire Arduino à l’aide de la matrice de LED

Ce site dispose de nombreux postes fines décrivant la construction d'horloges binaires. Je suis terriblement fragile, cependant et ont du mal avec toute soudure. Je voulais donc faire mine d'une matrice de LED contrôlé MAX7219 8 x 8.Étape 1: Lecture
Mon horloge binaire Arduino

Mon horloge binaire Arduino

Salut d'ItalieBien que beaucoup de montres est créés en binaire, mon projet a été inspiré essentiellement à ceci :http:// très intelligent et drôle.J'ai essayé d'améliorer la conception et d'ajouter quelque chose de personnel.Je pense que c'est un bo
Horloge binaire Arduino (heures, minutes et secondes)

Horloge binaire Arduino (heures, minutes et secondes)

Bonjour tout le monde ; Je cherchais ce projet depuis longtemps.  Enfin j'ai elle avec beaucoup d'efforts.  Pour ce projet, vous aurez besoin :1 - Arduino Uno (30 $ de Radio Shack)2 - RTC DS1307 (comme 2 $ sur EBay)3 - 2 registres à décalage 74HC595
Incroyable horloge binaire dans une matrice de LED

Incroyable horloge binaire dans une matrice de LED

Bonjour, tous!!Il s'agit de mon projet d'une horloge binaire à l'aide de la matrice de LED 8 x 8 et notamment des caractéristiques intéressantes.Toutes les informations du jour, mois, année, heure, minutes, numéro de la semaine de l'année sont présen
Une horloge binaire simple alimenté par USB

Une horloge binaire simple alimenté par USB

Oui, je sais, il y a déjà beaucoup, beaucoup d'instructables sur horloges binaires.  Je voulais construire un depuis un certain temps, donc avec le concours d'USB à l'esprit, je lui ai donné un aller. Donc, si vous aimez ce Instructable alors Merci d
Horloge binaire à l’aide de Neopixels

Horloge binaire à l’aide de Neopixels

Salut les gens, j'aime toutes choses LED associé et aussi comme faire utiliser d'entre eux de différentes façons intéressantes Oui, je sais que l'horloge binaire a été fait ici un certain nombre de fois, et chacun est excellent exemple de comment cré
Horloge binaire RGB

Horloge binaire RGB

Il s'agit de mon premier Instructable. Actuellement, je travaillais sur un autre projet, une horloge POV (également connu sous le nom une horloge hélice), mais je suis perplexe avec le pcb processus décisionnel et l'écart de pouvoir d'induction mais
Horloge binaire en 7 Segments LED affichage

Horloge binaire en 7 Segments LED affichage

Bonjour à tous,Ce projet va vous montrer une rare horloge binaire à l'aide d'affichage à LED de 7 segments (voir vidéo) et contrôlée par un Arduino.L'idée est très simple, juste convertir des données binaires, heures, minutes et secondes en segments
Plus petite horloge binaire

Plus petite horloge binaire

il s'agit de la plus petite horloge binaire qui indique l'heure avec seulement 4 leds.Le cerveau de cette horloge est PIC16F84A, l'heure s'affichera lorsque vous appuyez sur le bouton « afficher ». Les chiffres de l'heure sont affichées dans la BCD d
Horloge binaire

Horloge binaire

j'ai toujours envie d'avoir une horloge binaire, alors j'ai fait un et fonctionne très bien, je l'aime cette horloge est amusant de regarder trop.Le cœur de l'horloge est microcontroleur PIC16F84A et autres parties comme le cristal, LEDs.Merci de reg
Mural horloge binaire (80 LEDs)

Mural horloge binaire (80 LEDs)

une horloge binaire en temps réel.80 LEDs + Microchip PIC16F876A + DS1307 (CCF)
Horloge binaire analogique

Horloge binaire analogique

j'ai vu beaucoup d'instructables horloge binaire, et un jour j'ai essayé de créer une horloge originale basée sur cette idée.Alors, quand mon frère et moi étions à savoir nos quelques équations originales, il me dit: « pourquoi ne pas le faire en bin
Horloge binaire simple

Horloge binaire simple

ce projet est un kit qui est disponible à www.etsy.com/shop/applemountain et ebay.com/applemountIl est alimenté via une connexion USB minie. Il n'a pas d'interface avec un ordinateur, il seulement sangsues puissance du port USB.Il s'agit d'un grand p