/
horloge.ino
134 lines (120 loc) · 3.71 KB
/
horloge.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
//////////////////////////////////////////////////////////////////////////////////////////
/*
*** HORLOGE
*/
//////////////////////////////////////////////////////////////////////////////////////////
void initHorloge()
{
RTC.begin(); // Initialisation de l'horloge.
// Si la RTC n'est pas configurée, le faire avec les valeurs de l'ordinateur
// au moment de la compilation.
if (! RTC.isrunning()) {
RTC.adjust(DateTime(__DATE__, __TIME__));
}
// Pas nécessairement utile mais on prend toutes les précautions
if (!testHorloge()) {
RTC.adjust(DateTime(2000,1,1,0,0,0));
}
}
//////////////////////////////////////////////////////////////////////////////////////////
boolean testHorloge()
{
DateHeure = RTC.now();
int annees = DateHeure.year();
int mois = DateHeure.month();
int jours = DateHeure.day();
int heures = DateHeure.hour();
int minutes = DateHeure.minute();
int secondes = DateHeure.second();
boolean etat = true;
if (annees < 2000 || annees > 2099 ||
mois < 1 || mois > 12 ||
jours < 1 || jours > 31 ||
heures < 0 || heures > 23 ||
minutes < 0 || minutes > 59 ||
secondes < 0 || secondes > 59) {
etat = false;
}
return etat;
}
//////////////////////////////////////////////////////////////////////////////////////////
void afficherHorloge()
{
DateHeure = RTC.now();
formaterDateHeure();
lcd.setCursor(5,2);
lcd.print(Date);
lcd.setCursor(6,3);
lcd.print(Heure);
}
//////////////////////////////////////////////////////////////////////////////////////
void formaterDateHeure()
{
String ddmmyy = "";
if (DateHeure.day() < 10) {
ddmmyy = "0";
}
ddmmyy += String(DateHeure.day(),DEC) + '/';
if (DateHeure.month() < 10) {
ddmmyy += "0";
}
Date = ddmmyy + String(DateHeure.month(),DEC) + '/' + String(DateHeure.year(),DEC);
String hhmmss = "";
if (DateHeure.hour() < 10) {
hhmmss = "0";
}
hhmmss += String(DateHeure.hour(),DEC) + ':';
if (DateHeure.minute() < 10) {
hhmmss += "0";
}
hhmmss += String(DateHeure.minute(),DEC) + ':';
if (DateHeure.second() < 10) {
hhmmss += "0";
}
Heure = hhmmss + String(DateHeure.second(),DEC);
}
//////////////////////////////////////////////////////////////////////////////////////////
void afficherReglageHorloge()
{
// Leds de couleur
digitalWrite(LED_JAUNE, HIGH); // LED jaune allumée
digitalWrite(LED_VERTE, LOW); // LED verte éteinte
colonneLCD = 4;
String chaine = "";
// Affichage
lcd.setCursor(4,2);
lcd.print("JJMMAAAAhhmm");
// Gestion du clavier
do {
char touche = keypad.getKey();
if ((touche != NO_KEY) && (touche!='*') && (touche!='#')) { // Si une touche est pressée
lcd.setCursor(colonneLCD, 1);
lcd.print(touche);
chaine += touche;
colonneLCD++;
while (keypad.getKey() != NO_KEY); // On boucle tant que la touche pressée n'est pas relachée
}
} while (colonneLCD < 16);
decodeChaineHorloge(chaine);
selectMenu(TAG_ECRAN_ACCUEIL);
}
//////////////////////////////////////////////////////////////////////////////////////////
void decodeChaineHorloge(String chaine)
{
int jours = chaine.substring(0,2).toInt();
int mois = chaine.substring(2,4).toInt();
int annees = chaine.substring(4,8).toInt();
int heures = chaine.substring(8,10).toInt();
int minutes = chaine.substring(10,12).toInt();
if (annees >= 2000 && annees <= 2099 &&
mois >= 1 && mois <= 12 &&
jours >= 1 && jours <= 31 &&
heures >= 0 && heures <= 23 &&
minutes >= 0 && minutes <= 59) {
RTC.adjust(DateTime(annees, mois, jours, heures, minutes, 0));
}
else {
bipErreur();
}
}
//////////////////////////////////////////////////////////////////////////////////////