-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathclock.ino
127 lines (103 loc) · 2.91 KB
/
clock.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
void datahora()
{
if (ultimaAmostraCalendario > 0 && (millis() - ultimaAmostraCalendario < INTERVALO_CALENDAR)) {
return;
}
lcd.clear();
// Le os valores (data e hora) do modulo DS1307
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(zero);
Wire.endTransmission();
Wire.requestFrom(DS1307_ADDRESS, 7);
int segundos = ConverteparaDecimal(Wire.read());
int minutos = ConverteparaDecimal(Wire.read());
int horas = ConverteparaDecimal(Wire.read() & 0b111111);
int diadasemana = ConverteparaDecimal(Wire.read());
int diadomes = ConverteparaDecimal(Wire.read());
int mes = ConverteparaDecimal(Wire.read());
int ano = ConverteparaDecimal(Wire.read());
horaAtual = horas;
minutoAtual = minutos;
// Mostra os dados no display
lcd.setCursor(0, 0);
lcd.print(" ");
// Acrescenta o 0 (zero) se a hora for menor do que 10
if (horas < 10)
lcd.print("0");
lcd.print(horas);
lcd.print(":");
// Acrescenta o 0 (zero) se minutos for menor do que 10
if (minutos < 10)
lcd.print("0");
lcd.print(minutos);
lcd.setCursor(2, 1);
// Mostra o dia da semana
switch (diadasemana)
{
case 0: lcd.print("Dom");
break;
case 1: lcd.print("Seg");
break;
case 2: lcd.print("Ter");
break;
case 3: lcd.print("Quar");
break;
case 4: lcd.print("Qui");
break;
case 5: lcd.print("Sex");
break;
case 6: lcd.print("Sab");
}
lcd.setCursor(6, 1);
// Acrescenta o 0 (zero) se dia do mes for menor do que 10
if (diadomes < 10)
lcd.print("0");
lcd.print(diadomes);
lcd.print("/");
// Acrescenta o 0 (zero) se mes for menor do que 10
if (mes < 10)
lcd.print("0");
lcd.print(mes);
lcd.print("/");
lcd.print(ano);
ultimaAmostraCalendario = millis();
delay(INTERVALO_DISPLAY);
}
//Seta a data e a hora do DS1307
void SelecionaDataeHora()
{
byte segundos = 0; //Valores de 0 a 59
byte minutos = 46; //Valores de 0 a 59
byte horas = 12; //Valores de 0 a 23
byte diadasemana = 4; //Valores de 0 a 6 - 0=Domingo, 1 = Segunda, etc.
byte diadomes = 12; //Valores de 1 a 31
byte mes = 4; //Valores de 1 a 12
byte ano = 18; //Valores de 0 a 99
Wire.beginTransmission(DS1307_ADDRESS);
// Stop no CI para que o mesmo possa receber os dados
Wire.write(zero);
//As linhas abaixo escrevem no CI os valores de data e hora
Wire.write(ConverteParaBCD(segundos));
Wire.write(ConverteParaBCD(minutos));
Wire.write(ConverteParaBCD(horas));
Wire.write(ConverteParaBCD(diadasemana));
Wire.write(ConverteParaBCD(diadomes));
Wire.write(ConverteParaBCD(mes));
Wire.write(ConverteParaBCD(ano));
Wire.write(zero);
Wire.endTransmission();
}
/**
* Converte o número de decimal para BCD
*/
byte ConverteParaBCD(byte val)
{
return ( (val / 10 * 16) + (val % 10) );
}
/**
* Converte de BCD para decimal
*/
byte ConverteparaDecimal(byte val)
{
return ( (val / 16 * 10) + (val % 16) );
}