Étape 4: Programmer l’horloge
Comment programmer chaque composant :Horloge temps réel
Après avoir exécuté la SetTime initiale, il est très facile d’utiliser le DS1307. N’oubliez pas d’inclure le Time.h ainsi que les fichiers DS1307RTC.h et porter la mention « tmElements_t tm; ». Afin de pouvoir lire l’heure de l’horloge, créez un if déclaration en disant "if(RTC.read(tm))" pour vérifier si l’heure du CCF peut être lue. Dans ce cas exposé, vous pouvez obtenir toute potion du temps en écrivant ce qui suit :
TM. Heure
TM. Minute
TM. Journée
TM. Mois
TM. Année
Avertisseur sonore
Utilisez la fonction de tone() Arduino pour jouer les notes de diverses fréquences et durée sur mon buzzer piezo. Broche 9 sert une sortie pour le buzzer. La fonction de tonalité devrait être écrit comme suit :
ton (pin, fréquence, durée) ;
J’ai trouvé que la meilleure façon de jouer et de la chanson entière était de créer 3 tableaux qui dont les éléments individuels sont accessibles dans une boucle for. Un tableau a été pour les fréquences de chaque note, était pour la durée de chaque note, et la dernière était pour les pauses entre les notes. J’ai trouvé toutes ces informations pour la chanson thème de Super Mario depuis le poste de recréer sur ce forum :
http://Arduino.cc/forum/index.php/topic, 8409.0.html
Il ou elle utilise une bibliothèque séparée de tonalité dans son propre code, donc j’ai simplement copié les fréquences, les durées et les pauses dans mes propres tableaux. J’ai aussi ajouté 100 millisecondes à chaque pause et la durée, car la mélodie a été un peu rapide.
Affichage à cristaux liquides
Télécharger la bibliothèque de bouclier de LCD RVB de Adafruit trouvée au lien suivant :
https://github.com/Adafruit/Adafruit-RGB-LCD-Shield-Library
Dans votre code, incluent Adafruit_MCP23017.h et Adafruit_RGBLCDShield.h afin de manipuler l’écran LCD.
Comment le produit final devrait fonctionner :
L’affichage sur l’écran LCD doit se lire « Appuyer sur Select ». En appuyant sur la touche select passera l’horloge de mode de Set Alarm clock normal ou en mode horloge. Une fois en mode Set Alarm, appuyant sur la touche droite permettra vous permet de régler l’alarme activer ou désactiver (contrôlé par le bouton de gauche), régler l’heure de l’alarme (contrôlée par le bouton du haut) ou réglez les minutes de l’alarme (contrôlée par le bouton vers le bas). Pas de soucis si ce n’est pas tout à fait sensé encore. Chaque étape a des instructions sur quel bouton à presser le long du chemin.
Une fois que l’alarme est aller au large, vous pouvez le désactiver en appuyant simplement sur le bouton supplémentaire (attaché sur le devant de mon horloge).
Obtenir le code complet :
Ma boucle est assez compliqué, mais l’horloge fonctionne ! Si vous avez des suggestions sur la façon de simplifier le code, faites le moi savoir. Je l’ai trouvé plus difficiles à programmer que le bouton appuie comme des actions distinctes et d’obtenir l’horloge pour imprimer la date et l’heure afin qu’il mettrait à jour continuellement.
J’espère que vous serez capable de le comprendre dans le cas où vous voulez faire quelques réglages pour votre propre à l’horloge !
#include < DS1307RTC.h >
#include < Time.h >
#include < Wire.h >
#include < Adafruit_MCP23017.h >
#include < Adafruit_RGBLCDShield.h >
Code pour un cycle de sommeil-réveil
Utilise le détecteur de mouvement PIR, écran LCD, bouton piezo buzzer, horloge temps réel
Ces #defines le rendent facile définir la couleur du rétro-éclairage
#define rouge 0 x 1
#define jaune 0 x 3
#define vert 0 x 2
#define TEAL 0 x 6
#define bleu 0 x 4
#define VIOLET 0 x 5
#define blanc 0 x 7
Fréquences de sons joués dans la mélodie de l’alarme
la mélodie d’int [] = {660,660,510,660,770,380,510,380,320,440,480,450,
430,380,660,760,860,700,760,660,520,580,480,510,380,320,440,480,
450,430,380,660,760,860,700,760,660,520,580,480,500,760,720,680,
620,650,380,430,500,430,500,570,500,760,720} ;
durée des tons a joué dans la mélodie de l’alarme
la durée d’int [] = {200,200,200,200,200,200,200,200,200,200,180,200,
200,200,180,150,200,180,150,180,180,180,180,200,200,200,200,180,
200,200,200,180,150,200,180,150,180,180,180,180,200,200,200,200,
250,250,200,200,200,200,200,200,200,200,200} ;
délai entre les tons
int /Delay [] = {175,250,250,150,250,375,387,325,300,350,250,265,
175,250,200,200,175,250,175,275,250,175,175,275,375,300,350,250,265,
175,250,200,200,275,250,175,275,250,175,175,350,250,150,175,175,250,
250,175,175,250,175,150,210,250,150} ;
int switchPin = 5 ;
int pirPin = 6 ;
int buzzerPin = 9 ;
Sélectionne soit mode jeu ou horloge d’alarme
int modeSelect ;
entier de choisir quelle partie de l’alarme pour régler
int alarmSelect ;
Entier pour réglage de l’alarme sur on ou sur off
int alarmSetOnInt ;
Nombre entier à l’heure de réglage pour alarme
int alarmHourSet ;
Entier pour le réglage des minutes pour alarme
int alarmMinSet ;
Entier qui indique si la touche a été enfoncée
int buttonVal ;
Requête de suivi détecté entier
int motionDetected ;
Si l’alarme est activée
alarmOn booléen = false ;
Si oui ou non l’alam se passe actuellement au large
alarmGoingOff booléen = false ;
valeur booléenne qui est true, une fois passé l’heure de l’alarme
alarmCanGoOff booléen = false ;
tmElements_t tm ;
Lcd Adafruit_RGBLCDShield = Adafruit_RGBLCDShield() ;
void setup() {}
Wire.Begin() ;
Serial.Begin(9600) ;
LCD.Begin(16,2) ;
Set rétro-éclairage et message initial
lcd.setBacklight(VIOLET) ;
lcd.setCursor(1,1) ;
LCD.Print ("select de presse ») ;
pinMode (pirPin, entrée) ;
modeSelect = 0 ;
alarmSelect = 0 ;
alarmSetOnInt = 0 ;
alarmHourSet = -1 ;
alarmMinSet = -1 ;
motionDetected = 0 ;
alarmGoingOff = false ;
uint8_t i = 0 ;
}
void loop() {}
boutons d’uint8_t = lcd.readButtons() ;
buttonVal = digitalRead(switchPin) ;
if(buttonVal == High) {}
LCD.Clear() ;
alarmOn = false ;
alarmCanGoOff = false ;
alarmGoingOff = false ;
}
Si l’alarme n’est pas aller au large, imprimer la date normale et l’heure
{if(!alarmGoingOff)}
printDateTime() ;
}
Si l’alarme se passe au large et il n’est pas l’heure de l’alarme, continuer l’alarme
Si (alarmGoingOff & tm. Minute! = alarmMinSet) {}
LCD.Clear() ;
alarmOn =! alarmOn ;
alarmGoingOff =! alarmGoingOff ;
}
{if(Buttons)}
Si l’option touche, choisissez un mode
if(Buttons & BUTTON_SELECT) {}
if(modeSelect>1) {}
modeSelect = 0 ;
}
LCD.Clear() ;
modeSelect = modeSelect + 1 ;
alarmSelect = 0 ;
Delay(1000) ;
if(modeSelect == 1) {}
LCD.Clear() ;
lcd.setCursor(1,0) ;
LCD.Print ("alarme") ;
lcd.setCursor(1,1) ;
LCD.Print ("Appuyez sur droite") ;
Delay(1000) ;
}
}
Mode sélectionné, s’alarme ensemble, activez le paramètre de l’alarme
if(modeSelect == 1) {}
if(Buttons & BUTTON_RIGHT) {}
if(alarmSelect>2) {}
alarmSelect = 0 ;
}
alarmSelect = alarmSelect + 1 ;
Delay(1000) ;
Voir l’établissement si l’alarme est activée ou désactivée
if(alarmSelect == 1) {}
LCD.Clear() ;
{if(!alarmOn)}
lcd.setCursor(1,0) ;
LCD.Print ("Alarm off") ;
lcd.setCursor(1,1) ;
LCD.Print ("Appuyez sur gauche") ;
Delay(1000) ;
} else {if(alarmOn)
lcd.setCursor(1,0) ;
LCD.Print ("Alarm sur") ;
print2digits(alarmHourSet,10,0) ;
lcd.setCursor(12,0) ;
LCD.Print(":") ;
print2digits(alarmMinSet,13,0) ;
}
} else if(alarmSelect == 2) {}
LCD.Clear() ;
lcd.setCursor(1,0) ;
LCD.Print ("Set Hour") ;
lcd.setCursor(1,1) ;
LCD.Print (« press UP") ;
} else if(alarmSelect == 3) {}
LCD.Clear() ;
lcd.setCursor(1,0) ;
LCD.Print ("Set Minutes ») ;
lcd.setCursor(1,1) ;
LCD.Print ("appuyer") ;
}
}
}
Indiquez si l’alarme est activée ou désactivée
if(alarmSelect == 1) {}
if(Buttons & BUTTON_LEFT) {}
alarmOn =! alarmOn ;
LCD.Clear() ;
Delay(1000) ;
{if(alarmOn)}
LCD.Print ("Alarm sur") ;
} else {if(!alarmOn)
LCD.Print ("Alarm Off") ;
}
}
}
Heures fixes
if(alarmSelect == 2) {}
if(Buttons & BUTTON_UP) {}
LCD.Clear() ;
alarmHourSet = alarmHourSet + 1 ;
if(alarmHourSet>24) {}
alarmHourSet = 0 ;
}
Delay(500) ;
}
print2digits(alarmHourSet,14,0) ;
}
Régler les minutes
if(alarmSelect == 3) {}
if(Buttons & BUTTON_DOWN) {}
LCD.Clear() ;
alarmMinSet = alarmMinSet + 1 ;
if(alarmMinSet>59) {}
alarmMinSet = 0 ;
}
Delay(100) ;
}
print2digits(alarmMinSet,14,0) ;
}
}
Alarme peut partir une fois que l’heure de l’alarme est égal à l’heure actuelle
Si (alarmOn & alarmMinSet == tm. Minute & alarmHourSet == tm. Heure & modeSelect! = 1) {}
alarmCanGoOff = true ;
Serial.println ("alarme peut partir") ;
}
Si l’alarme peut s’éteignent et que l’horloge est en mode horloge, l’alarme sera
s’éteint après 3 consécutifs détections de mouvement
Si (alarmCanGoOff & modeSelect! = 1) {}
Serial.println(alarmCanGoOff) ;
int pirVal = digitalRead(pirPin) ;
if(pirVal == High) {}
motionDetected ++ ;
Serial.println ("mouvement détecté") ;
Delay(1000) ;
}
if(pirVal == Low) {}
motionDetected = 0 ;
}
{if(alarmCanGoOff)}
Si (motionDetected > 2 || tm. Heure == alarmHourSet + 1) {}
Alarm() ;
motionDetected = 0 ;
}
}
}
}
Méthode de s’alarmer. Modifie l’affichage et joue la mélodie
alarm() Sub {}
LCD.Clear() ;
lcd.setCursor(1,0) ;
LCD.Print ("WAKE UPPPP!!!") ;
alarmGoingOff = true ;
pour (int i = 0; i < 54; i ++) {}
buttonVal = digitalRead(switchPin) ;
{if(buttonVal!=High)}
Delay(delayTime[i]) ;
ton (buzzerPin, melody[i],duration[i]) ;
}
}
}
imprimer la date et l’heure
void printDateTime() {}
if(RTC.Read(TM) & modeSelect == 2) {}
print2digits(TM. Heure, 1, 0) ;
lcd.setCursor(3,0) ;
LCD.Print(":") ;
print2digits(TM. Minute, 4, 0) ;
lcd.setCursor(6,0) ;
LCD.Print(":") ;
print2digits(TM. Seconde, 7, 0) ;
print2digits(TM. Mois, 1, 1) ;
lcd.setCursor(3,1) ;
LCD.Print("/") ;
print2digits(TM. Jour, 4, 1) ;
Serial.println (tm. Journée) ;
}
}
Imprimer des numéros dans un endroit à l’aide de deux chiffres (pour le format de l’horloge appropriée)
void print2digits (int, int colonne, int row) {}
Si (nombre > = 0 & & nombre < 10) {}
lcd.setCursor(column,row) ;
LCD.Print('0') ;
lcd.setCursor(column+1,row) ;
LCD.Print(Number) ;
}
else if (nombre > = 10) {}
lcd.setCursor(column,row) ;
LCD.Print(Number) ;
}
}