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

Étape 7: Prototypage, l’affichage et réglage de l’heure

Notre programme est inutile si m_inTimeSetMode est toujours définie au début du programme, nous allons donc travailler sur la possibilité de définir cette variable à l’aide d’un commutateur.

Pour ce faire, nous allons utiliser un commutateur d’unipolaires bidirectionnels (SPDT), ou un interrupteur « on - on ». Connectez le fil moyen à A2 d’entrée analogique, d'entre les fils extérieurs à la terre et l’autre conducteur extérieur à 5V. La méthode analogRead(A2) doit maintenant retourner 0 ou 1023 quand l’interrupteur est basculé en arrière.

Nous voulons indiquer visuellement à l’utilisateur qu’ils sont en mode de réglage avec une LED. L’ONU a seulement 14 broches numériques, et puisque nous utilisons déjà chacun d’eux (13 pour les LEDs de temps) et 1 broche pour le PWM qui sera utilisé sur le compteur analogique, nous pouvons heureusement transformer une broche analogique en numérique broche de sortie ! Il suffit d’appeler pinMode (A5, sortie) à utiliser A5 comme une broche de sortie numérique.

Nous aurons besoin de vérifier si nous sommes en mode de mise à l’heure ou l’affichage de temps au tout début de la méthode loop(). Nous allons mettre cette logique dans une méthode appelée checkMode().

Maintenant, vous avez une horloge binaire qui garde le temps et pouvez être réglée manuellement par l’utilisateur !

Tout le Code jusqu'à présent
/*
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
fixée à broches numériques entre 0 et 10, 12 et 13, permet pour le moment
réglage avec les potentiomètres et peuvent être affichés/masqués entre temps
réglage du mode et mode d’affichage de temps.

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

int HOUR_INPUT_PIN = A0 ;
int MIN_INPUT_PIN = A1 ;
int CLOCK_MODE_SWITCH_PIN = A2 ;
int CLOCK_MODE_LED_PIN = A5 ;

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()
{
à l’aide d’une des entrées analogiques en sortie
pinMode (CLOCK_MODE_LED_PIN, sortie) ;

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 (2, 18, 0) ;
}

la routine de la boucle s’exécute maintes et maintes fois pour toujours :
void loop()
{
checkMode() ;

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_hour, m_minute et m_second.
*/
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()
{
lire les potentiomètres
int hourSensor = analogRead(HOUR_INPUT_PIN) ;
int minuteSensor = analogRead(MIN_INPUT_PIN) ;

mettre à l’échelle les valeurs (de 0 à 1023) à l’échelle appropriée (0 à 23 heures, 0 à 59 minutes)
setTime (carte (hourSensor, 0, 1023, 0, 23), carte (minuteSensor, 0, 1023, 0, 59), 0) ;

Nous avons mis le dernier battement maintenant, parce que quand nous avons mis m_inTimeSetMode false,
nombre de secondes pourrait se sont écoulés depuis le dernier d'entre eux, et le temps serait avancer
m_lastTick = millis() ;
}

/**
* Cette méthode vérifie CLOCK_MODE_SWITCH_PIN pour voir si elle est haute. Si c’est le cas,
* Cela signifie que nous sommes maintenant en mode réglage de l’horloge (m_inTimeSetMode a la valeur true), et
* allume le CLOCK_MODE_LED_PIN.
*/
Sub checkMode()
{
m_inTimeSetMode = (analogRead(CLOCK_MODE_SWITCH_PIN) > 512) ;
digitalWrite (CLOCK_MODE_LED_PIN, m_inTimeSetMode) ;
}

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