Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Programa: Relogio Tempo Real com alarme.
- Hardware: Arduino Uno Shield RTC Grove.
- Preaparado para display 20X4 mas pode ser usado com display 16X2
- Criado por Eng. Carlos kwiek - Rio de Janeiro - RJ - Brasil
- 02 de Agosto de 2015 - e-mail carloskwiek1@hotmail.com
- O codigo é livre para uso e modificação, seguindo as diretivas de
- software open source.
- Use por sua conta e risco.
- */
- #include "Wire.h"
- #include <LiquidCrystal.h>
- #define DS1307_ADDRESS 0x68
- // Inicializa o LCD
- LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
- byte zero = 0x00;
- int buzzer = 13;
- void setup()
- {
- pinMode (buzzer, OUTPUT);
- // Define o LCD com 16 colunas e 2 linhas
- lcd.begin(16, 2);
- Wire.begin();
- Serial.begin(9600);
- // A linha abaixo pode ser retirada apos setar a data e hora
- // SelecionaDataeHora();
- }
- void loop()
- {
- Mostrarelogio();
- delay(1000);
- }
- void SelecionaDataeHora() // Seta a data e a hora do DS1307
- {
- byte segundos = 01; // Valores de 0 a 59
- byte minutos = 27; // Valores de 0 a 59
- byte horas = 10; // Valores de 0 a 23
- byte diadasemana = 0; // Valores de 0 a 6 (0=Domingo, 1 = Segunda...)
- byte diadomes = 27; // Valores de 1 a 31
- byte mes = 3; // Valores de 1 a 12
- byte ano = 16; // 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 que foram colocados nas variaveis acima
- 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); //Start no CI
- Wire.endTransmission();
- }
- byte ConverteParaBCD(byte val)
- {
- // Converte o número de decimal para BCD
- return ( (val/10*16) + (val%10) );
- }
- byte ConverteparaDecimal(byte val)
- {
- // Converte de BCD para decimal
- return ( (val/16*10) + (val%16) );
- }
- void Mostrarelogio()
- {
- 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());
- // Imprime mensagem na primeira linha do display
- lcd.setCursor(0,0);
- lcd.print(" DATA: ");
- // Mostra a hora atual no display
- lcd.setCursor(6, 1);
- if (horas < 10)
- {
- lcd.print("0");
- }
- lcd.print(horas);
- lcd.print(":");
- if (minutos < 10)
- {
- lcd.print("0");
- }
- lcd.print(minutos);
- lcd.print(":");
- if (segundos < 10)
- {
- lcd.print("0");
- }
- lcd.print(segundos);
- // Mostra a HORA atual no display
- lcd.setCursor(0,1);
- lcd.print(" HORA: ");
- lcd.setCursor(0, 2);
- lcd.print(" ");
- lcd.setCursor(6,0);
- if (diadomes < 10)
- {
- lcd.print("0");
- }
- lcd.print(diadomes);
- lcd.print(".");
- if (mes < 10)
- {
- lcd.print("0");
- }
- lcd.print(mes);
- lcd.print(".");
- lcd.print(ano);
- // Definicao do alarme.
- if (horas == 03 && minutos == 41 && segundos == 0)//Define a hora de tocar o alarme por 1o segundos
- {
- digitalWrite (buzzer, HIGH);// Eleva tensao pino 13 para 5V
- delay (10000);// Atrasa 50ms
- }
- {
- digitalWrite (buzzer, LOW); //Abaixa tensao pino 13 para 0V
- }
- if (horas == 18 && minutos == 00 && segundos == 00)//Define a hora de tocar o alarme por 10 segundos
- {
- digitalWrite (buzzer, HIGH);// Eleva tensao pino 13 para 5V
- delay (10000);// Atrasa 50ms
- }
- {
- digitalWrite (buzzer, LOW); //Abaixa tensao pino 13 para 0V
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement