Projeto Relógio
Na aula de hoje, nós da equipe Robotics School recriamos um relógio digital utilizando o Arduino. Para isso, usamos os seguintes materiais:
- Arduino Uno;
- LCD;
- Jumpers;
- Potenciômetro;
- Protoboard.
Montagem:
Fonte: Laboratório de Garagem
Programação:
#include <LiquidCrystal.h> //Inclui a
biblioteca do LCD
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int segundo,minuto, hora, dia, mes,ano;
unsigned long
UtlTime;
void setup()
{
UtlTime=0;
minuto=0;
hora=0;
dia=0;
mes=0;
ano=0;
Serial.begin(9600);
lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.print(" Data e hora ");
lcd.setCursor(0,1);
lcd.print(" com Arduino");
delay (2000);
//Configura o minuto
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Minuto: ");
Serial.print("\nEntre
Minuto:");
while(minuto==0) {
if
(Serial.available() > 0)
{
minuto= Serial.parseInt();
}
}
lcd.print(minuto);
delay(1000);
//Configura a hora
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Hora: ");
Serial.print("\nEntre
Hora:");
while(hora==0)
{
if
(Serial.available() > 0)
{
hora= Serial.parseInt();
}
}
lcd.print(hora);
delay(1000);
//Configura o Dia
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Dia: ");
Serial.print("\nEntre Dia:");
while(dia==0)
{
if
(Serial.available() > 0)
{
dia=
Serial.parseInt();
}
}
lcd.print(dia);
delay(1000);
//Configura o mês
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Mes:
");
Serial.print("\nEntre
Mes:");
while(mes==0)
{
if
(Serial.available() > 0)
{
mes=
Serial.parseInt();
}
}
lcd.print(mes);
delay(1000);
//Configura o Ano
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Ano: ");
Serial.print("\nEntre ano:");
while(ano==0)
{
if
(Serial.available() > 0)
{
ano= Serial.parseInt();
}
}
lcd.print(ano);
delay(1000);
lcd.clear();
}
void loop()
{
if(millis()-UtlTime<0)
{
UtlTime=millis();
}
else
{
segundo=int((millis()-UtlTime)/1000);
}
if(segundo>59)
{
segundo=0;
minuto++;
UtlTime=millis();
if(minuto>59)
{
hora++;
minuto=0;
if(hora>23)
{
dia++;
hora=0;
if(mes==1||mes==3||mes==5||mes==7||mes==8||mes==10||mes==12)
{
if(dia>31)
{
dia=1;
mes++;
if(mes>12)
{
ano++;
mes=1;
}
}
}
else
if(mes==2)
{
if(ano%400==0)
{
if(dia>29)
{
dia=1;
mes++;
}
}
else
if((ano%4==0)&&(ano%100!=0))
{
if(dia>29)
{
dia=1;
mes++;
}
}
else
{
if(dia>28)
{
dia=1;
mes++;
}
}
}
else
{
if(dia>30)
{
dia=1;
mes++;
}
}
}
}
}
Serial.print(dia);
Serial.print("/");
Serial.print(mes);
Serial.print("/");
Serial.print(ano);
Serial.println();
lcd.setCursor(0,0);
lcd.print("Data
");
lcd.print(dia);
lcd.print("/");
lcd.print(mes);
lcd.print("/");
lcd.print(ano);
Serial.print(hora);
Serial.print(":");
Serial.print(minuto);
Serial.print(":");
Serial.print(segundo);
Serial.print("\n");
Serial.println();
lcd.setCursor(0,1);
lcd.print("Hora ");
lcd.print(hora);
lcd.print(":");
lcd.print(minuto);
lcd.print(":");
lcd.print(segundo);
}
Depois de ter feito a programação e compilado
para o Arduino, clique em Serial Monitor no lado superior direito da imagem:
Na Serial Monitor configure o minuto, hora, dia, mês e o ano, respectivamente.
Seu relógio está pronto!
Relógio em funcionamento
OLÁ, copiei e colei no arduino e está dando esse erro na compilação
ResponderExcluir"c:/program files/arduino/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr6/crtm2560.o: In function `__vector_default':
(.vectors+0xcc): relocation truncated to fit: R_AVR_13_PCREL against symbol `__vector_51' defined in .text.__vector_51 section in core.a(HardwareSerial.cpp.o)"
Olá!
ExcluirPara que você consiga utilizar corretamente esta programação é necessário adaptar ao seu projeto, por exemplo: portas e bibliotecas.
Abraço e boa sorte!!
Eu tive o exato problema que você, com mesma mensagem de erro. Você descobriu qual o problema?
ExcluirA única diferença para meu código é que uso o LCD em um shield de LCD e os pinos são outros, para isso preciso mudar a linha para LiquidCrystal lcd(8,9,4,5,6,7); pois no shield estes são os pinos equivalentes.
Adorei o projeto de vcs....que não tem a utilização do RTC,que eu fiquei tão curioso que copiei o código e mandei para arduino porem percebi que o segundos quando devia ir de 59 para 00 fica com 9 ainda na direita e a contagem na esquerda so depois do 10 e que fica beleza......da uma olhada no código e corrija esse probleminha para ficar melhor ainda um abraço.....
ResponderExcluirMuito obrigado! Pode deixar que iremos corrigir o erro. Novamente, agradecendo por nos informar! Abraço :)
ExcluirOlá, achei muito bom o projeto do relógio sem a necessidade de outros CI's. Também percebi o errinho no marcador de segundos, e resolvi aplicando um clear antes de "printar" as informações no LCD e um delay de 1000 ms depois.
ExcluirOla de novo....deixei funcionando um pouco porem da uma olhada quando ele muda de hora ....verifiquem o código que tem algo errado.....deixem ele rodar uma hora para verem um abraço...
ResponderExcluirArduino: 1.8.1 (Windows 10), Placa:"Arduino/Genuino Uno"
ResponderExcluirA placa em COM1 não está disponível
Este relatório teria mais informação com a
opção «Mostrar mensagens detalhadas durante a
compilação» seleccionada nas Preferências.
aparece este erro alguem consegue ajudar ?