O projeto utiliza a biblioteca Time, LCD por I2C e botões para alterar data e hora.

Vamos ao circuito:

Os botões servem para incrementar a hora, minuto, dia, mês e ano. O potenciômetro controla o contraste do LCD 16x2. 

A programação TimeSerial foi modificada e está mostrada abaixo:


#include <Time.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

#define TIME_MSG_LEN 11 // time sync to PC is HEADER followed by unix time_t as ten ascii digits
#define TIME_REQUEST 7 // ASCII bell character requests a time sync message
LiquidCrystal_I2C lcd(56,16,2);   //If 
long previousmillis=0;
int hr=0;
int minut=0;
int dia=0;
int mes=0;
int ano=0;
int count=0;

void setup() {
lcd.init();
lcd.backlight();
pinMode(2,INPUT);
pinMode(3,INPUT);
pinMode(4,INPUT);
pinMode(5,INPUT);
pinMode(6,INPUT);
pinMode(7,INPUT);
Serial.begin(9600);
Serial.println("Waiting for sync message");
lcd.print("Waiting");
lcd.setCursor(0,1);
lcd.print("for sync message");
setTime(0,0,0,1,1,0);
}

void loop(){

if(Serial.available() )
{
processSyncMessage();
}


if((digitalRead(7)==HIGH))     //Change button
{
count=count+1;
Serial.println("OK");
if(count>1)
{
count=0;
}
}
if((digitalRead(3)==HIGH) && count==1)  //Hour button
{
hr=3600;
adjustTime(hr);
}
if((digitalRead(2)==HIGH) && count==1)   //Minute button
{
minut=60;
adjustTime(minut);
}
if((digitalRead(6)==HIGH) && count==1)   //Day Button
{
dia++;
if(dia+day()>31)
{
dia=1-day();
}
}
if((digitalRead(5)==HIGH) && count==1)   //Month button
{
mes++;
if(mes+month()>12)
{
mes=1-month();
}
}
if((digitalRead(4)==HIGH) && count==1)    //Year Button
{
ano++;

}

if(timeStatus()!= timeNotSet)
{
digitalWrite(13,timeStatus() == timeSet); // on if synced, off if needs refresh
digitalClockDisplay();
}
delay(1000);

}

void digitalClockDisplay(){
// digital clock display of the time
lcd.clear();
lcd.print("Hora: ");
lcd.print(hour());
Serial.print(hour());
printDigits(minute());
printDigits(second());
lcd.setCursor(0,1);
Serial.print(" ");
Serial.print(dia+day());
lcd.print("Data: ");
lcd.print(dia+day());
lcd.print(".");
Serial.print(" ");
Serial.print(mes+month());
lcd.print(mes+month());
lcd.print(".");
Serial.print(" ");
Serial.print(ano+year());
lcd.print(ano+year());
Serial.println();
}

void printDigits(int digits){
// utility function for digital clock display: prints preceding colon and leading 0
Serial.print(":");
lcd.print(":");
if(digits < 10){
Serial.print('0');
lcd.print("0");
}
Serial.print(digits);
lcd.print(digits);
}

void processSyncMessage() {
// if time sync available from serial port, update time and return true
while(Serial.available() >= TIME_MSG_LEN ){ // time message consists of a header and ten ascii digits
char c = Serial.read() ;
Serial.print(c);
if( c == TIME_HEADER ) {
time_t pctime = 0;
for(int i=0; i < TIME_MSG_LEN -1; i++){
c = Serial.read();
if( c >= '0' && c <= '9'){
pctime = (10 * pctime) + (c - '0') ; // convert digits to a number
}
}
setTime(pctime); // Sync Arduino clock to the time received on the serial port
}
}
}

time_t requestSync()
{
Serial.write(TIME_REQUEST);
return 0; // the time will be sent later in response to serial mesg
}

Adicionamos os botões e a biblioteca LCD 16x2 por I2C. Para alterar a hora, por exemplo, é necessário apertar o botão de mudança (localizado no pino digital 7). E depois apertar o botão da hora (localizado no pino digital 3). Ao apertar o botão, incrementará a hora.

Cuidado! Neste projeto não estamos utilizando o RTC (Real Time Clock)! Se o Arduino desligar, a configuração será perdida!

E é isso!! Esperamos que tenha gostado!! Caso tenha dúvidas, poste aqui neste blog! Para sugestões de tutoriais, clique aqui! Para ver outros tutoriais e projetos desenvolvidos pela equipe LdG e por outros garagistas, clique aqui e aqui, respectivamente! Até a próxima!

Referências:

http://arduino.cc/playground/Code/Time

http://arduino.cc/en/Tutorial/Button

http://arduino.cc/playground/Code/LCDi2c

http://labdegaragem.com/profiles/blogs/tutorial-sobre-pcf8574-e-com...

Exibições: 67001

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de Oliveira em 13 setembro 2020 às 19:11

Aqui neste site existe algum projeto de Relógio com Data e que tenha sensores de Humidade,Temperatura,  tipo uma estação Climatológica.

Obrigado

Comentário de Oliveira em 22 julho 2019 às 19:16

Gostei do projeto.  Mas um projeto de relogio,data,humidade e temperatura .

Se alguem souber me avise por gentileza.

Obrigado

Comentário de Oliveira em 25 maio 2017 às 17:57

Ola .

Este projeto é oque procuro ,ideal se ele tivesse tambem como medir Temperatura Umidade alem das Horars e Datas.

Eu tenho um Display grande ,vou ver se ele funciona neste relogo.

Valeu turma.

QSL do Brasil

Comentário de Oliveira em 29 janeiro 2017 às 16:58

Este projeto do relogio ,se eu quizer montar ele em uma placa de fenolite enfim fazer o relogio como eu tiro este projeto do Arduino?

Comentário de Bruno Shinkawa em 3 abril 2015 às 19:19

como faz para comprar os componentes arduino como relogio...preciso fazer um projeto

Comentário de Alexandre Souza Cunha em 22 maio 2014 às 20:44

Estou querendo usar esse projeto com o MSP430, o meu professor utiliza o msp430 da texas nas aulas.

Comentário de Fabiano Andrade em 18 fevereiro 2014 às 13:34

estou programando um RTC no arduino, quando o arduino esta conectado via serial a logica funciona apagando ou acendendo uma lampada em determinda hora, mas quando conectado em uma alimentação externa não funciona a automatização das lampadas.

Comentário de eliseu severino de souza em 7 janeiro 2014 às 17:36

oi alguem pode me ajudar desde que comprei um rtc para usar no arduino uno não conseguir usar toda vez que copio e colo o codigo no arduino e verifico fica marcado em umas das linhas do codigo como se fosse erro, estou querendo um codigo que funcione e um exemplo com uma carga pra ligar e desligar no horario e dia que eu configura 

Comentário de Oseias Prestes Soares em 24 fevereiro 2013 às 16:15

senhores fiz o circuito acima exatamente como esta no desenho, e meu arduino, na hora que pluguei com o note, aconteceu algo estranho, deu sinal de hardware conectado, e logo em seguida deu sinal de desconectado, e não fez upload. alguem pode me ajudar???

Comentário de Rodrigo Daniel em 7 janeiro 2013 às 21:14

alguém tem o esquema eletrico, pinagens, etc?! a imagem apenas ilustra, nao nomeia os pinos do display

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço