[ AJUDA ] Projeto Relógio LCD

Criei um sistema de relógio para a shield LCD, usei mesmo algorítimo de um programa q eu havia feito quando ainda estava aprendendo a programar em PASCAL, mudei a “formatação” da programação pro arduino ,ou seja, C, e dai preciso de uma LUZ, funcionou legal a hora só que eu queria usar os boto?s da minha shield e não estou conseguindo, como uso o MEGA a pinagem da shield fica assim: LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

Vou postar o Código Usado até agora e vocês se conseguirem me ajudar a colocar uma forma de iserir a hora pelos botões por favor…:

O código ficou extenso pois a hora aparecia assim 1:0:2 e eu queria assim 01:00:02 por exemplo dai existe uma combinação de elementos com e sem o 0 na frente, dai cada forma se encaixa em algum “IF”, testado em 6 horas não deu nenhum segundo de erro.

#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //essa é a pinagem LCD no MEGA.
int segundo;
int minuto;
int hora;
int cont;
void setup() {
lcd.begin(16, 2);
hora = 0;
minuto = 0;
segundo = 0;
lcd.print(" Relogio “);
}
void loop() {
lcd.setCursor(1,0);
lcd.print(” Relogio “);
lcd.setCursor(4,1);
segundo=segundo + 1;
delay(1000);
if (segundo >=60) {
segundo = 0;
minuto = minuto+1;
cont = cont+10;
lcd.clear();
lcd.setCursor(1,0);
lcd.print(” Relogio “);
lcd.setCursor(4,1);
}
if (minuto >=60){
segundo =0;
minuto=0;
hora = hora+1;
cont = 0;
lcd.clear();
lcd.setCursor(1,0);
lcd.print(” Relogio “);
lcd.setCursor(4,1);
}
if ((segundo < 10) & (minuto < 10) & (hora < 10)) {
lcd.print(“0”);
lcd.print(hora);
lcd.print(”:");
lcd.print(“0”);
lcd.print(minuto);
lcd.print(":");
lcd.print(“0”);
lcd.print(segundo);
}
if ((segundo >= 10) & (minuto >= 10) & (hora >= 10)){
lcd.print(hora);
lcd.print(":");
lcd.print(minuto);
lcd.print(":");
lcd.print(segundo);
}
if ((segundo >= 10) & (minuto < 10) & (hora < 10))
{
lcd.print(“0”);
lcd.print(hora);
lcd.print(":");
lcd.print(“0”);
lcd.print(minuto);
lcd.print(":");
lcd.print(segundo);
}
if ((segundo >= 10) & (minuto < 10) & (hora >= 10)){
lcd.print(hora);
lcd.print(":");
lcd.print(“0”);
lcd.print(minuto);
lcd.print(":");
lcd.print(segundo);
}
if ((segundo >= 10) & (minuto >= 10) & (hora < 10)) {
lcd.print(“0”);
lcd.print(hora);
lcd.print(":");
lcd.print(minuto);
lcd.print(":");
lcd.print(segundo);
}
if ((segundo < 10) & (minuto >= 10) & (hora >= 10)){
lcd.print(hora);
lcd.print(":");
lcd.print(minuto);
lcd.print(":");
lcd.print(“0”);
lcd.print(segundo);
}
if ((segundo < 10) & (minuto >= 10) & (hora < 10)) {
lcd.print(“0”);
lcd.print(hora);
lcd.print(":");
lcd.print(minuto);
lcd.print(":");
lcd.print(“0”);
lcd.print(segundo);
}
if ((segundo < 10) & (minuto < 10) & (hora >= 10)) {
lcd.print(hora);
lcd.print(":");
lcd.print(“0”);
lcd.print(minuto);
lcd.print(":");
lcd.print(“0”);
lcd.print(segundo);
}
}

Opzzz, bele?

Uma vez tentei fazer um relogio por software, mas a precisao foi pro "saco" usei um rtc que ficou muito mais facil e preciso.

Voce nao tem o mesmo problema com o seu relogio?

se interessar, datasheet ds1307

http://www.maxim-ic.com/datasheet/index.mvp/id/2688

funcionou com autonomia testada de 12 horas, em 12 horas não desviou,travou nem 1 segundo sequer... ehehe deixei com cronometro no PC e do iPod. Agora implementei Sensor de Temperatura... e também alarme pensando um pouco... o q este CI q vc mandou faz?

#include <LiquidCrystal.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //essa é a pinagem LCD no MEGA.
int segundo;
int minuto;
int hora;
int cont;
int pin = 15;
int tempc= 0, tempf=0,tempk=0;
int samples[8];
int i;
byte newChar[8] = {
B00000,
B00100,
B01010,
B01010,
B00100,
B00000,
B00000,
B00000
};
void setup() {

lcd.begin(16, 2);
lcd.createChar(0, newChar);
hora = 23;
minuto = 59;
segundo = 50;
Serial.begin(9600);
lcd.setCursor(0,0);
lcd.print(“B03iR4 Creation”);
delay(10000);
lcd.clear();
lcd.print(“The Time Machine”);
delay(5000);
lcd.clear();
lcd.print(“Loading.”);
delay(100);
lcd.clear();
lcd.print(“Loading…”);
delay(200);
lcd.clear();
lcd.print(“Loading…”);
delay(500);
lcd.clear();
lcd.print(“Loading…”);
delay(2000);
lcd.clear();
}
void loop() {

for(i = 0; i<=7 ;i++){
samples = ( 5.0 * analogRead(pin) * 100.0) / 1024.0;
tempc = tempc + samples*; // somando os 8 valores lidos*
}
tempc = tempc/8.0;

* lcd.setCursor(1,0);*
* lcd.print("Temp: ");*
* lcd.print(tempc);*
* lcd.write(0);*
* lcd.print(“C”);*
* lcd.setCursor(1,1);*
* lcd.print("Time: ");*
* lcd.setCursor(7,1);*
segundo=segundo + 1;
delay(1000);
* if (segundo >=60) {*
segundo = 0;
minuto = minuto+1;
cont = cont+10;
lcd.clear();
lcd.setCursor(1,0);
* lcd.print(tempc);*
lcd.setCursor(7,1);
* }*
* if (minuto >=60){*
* segundo =0;*
* minuto=0;*
* hora = hora+1;*
* cont = 0;*
* lcd.clear();*
* lcd.setCursor(1,0);*
* lcd.print(tempc);*
* lcd.setCursor(7,1);*
* }*
* if (hora >=24) {*
* hora = 0;*
* minuto = 0;*
* segundo = 0;*
* lcd.setCursor(1,0);*
* lcd.print(tempc);*
* lcd.setCursor(7,1);*
* }*
if ((segundo < 10) & (minuto < 10) & (hora < 10)) {
*lcd.print(“0”); *
lcd.print(hora);
lcd.print(":");
lcd.print(“0”);
lcd.print(minuto);
lcd.print(":");
lcd.print(“0”);
lcd.print(segundo);
}
*if ((segundo >= 10) & (minuto >= 10) & (hora >= 10)){ *
lcd.print(hora);
lcd.print(":");
lcd.print(minuto);
lcd.print(":");
lcd.print(segundo);
}
if ((segundo >= 10) & (minuto < 10) & (hora < 10))
{
*lcd.print(“0”); *
lcd.print(hora);
lcd.print(":");
lcd.print(“0”);
lcd.print(minuto);
lcd.print(":");
lcd.print(segundo);
}
*if ((segundo >= 10) & (minuto < 10) & (hora >= 10)){ *
lcd.print(hora);
lcd.print(":");
lcd.print(“0”);
lcd.print(minuto);
lcd.print(":");
lcd.print(segundo);
}
if ((segundo >= 10) & (minuto >= 10) & (hora < 10)) {
*lcd.print(“0”); *
lcd.print(hora);
lcd.print(":");
lcd.print(minuto);
lcd.print(":");
lcd.print(segundo);
}
*if ((segundo < 10) & (minuto >= 10) & (hora >= 10)){ *
lcd.print(hora);
lcd.print(":");
lcd.print(minuto);
lcd.print(":");
lcd.print(“0”);
lcd.print(segundo);
}
if ((segundo < 10) & (minuto >= 10) & (hora < 10)) {
*lcd.print(“0”); *
lcd.print(hora);
lcd.print(":");
lcd.print(minuto);
lcd.print(":");
lcd.print(“0”);
lcd.print(segundo);
}
*if ((segundo < 10) & (minuto < 10) & (hora >= 10)) { *
lcd.print(hora);
lcd.print(":");
lcd.print(“0”);
lcd.print(minuto);
lcd.print(":");
lcd.print(“0”);
lcd.print(segundo);
}
if (segundo >= 5) {
* tone(22, 454, 454);*
}
}
[/quote]

Ele é um Rtc "real time controler"

voce pergunta pra ele que horas são, e ele te responde horas, minutos, segundos, dia do mes, dia da semana e ano! Se quiser um exemplo...

comecei a implementar o código acima e quanto mais coisas coloco mais variação do comando delay da, vou precisar de um RTC, pesquisei hoje sobre isso, sabe quanto custa?

shield http://produto.mercadolivre.com.br/MLB-185847974-arduino-rtc-i2c-ds1307-modulo-_JM

ci http://produto.mercadolivre.com.br/MLB-183399939-ds1307-real-time-clock-rtc-apenas-700-_JM

O ruim deste seu código é que se colocar qualquer linha mais , vai ter que mexer nos delay pra recuperar o tempo perdido no processamento desta linhas incluidas. :~

PUTZ me desculpe nem li o teu post e fiz o mesmo comentário qua voce havia feito no ultimo post. :blush:

A propósito, de onde voce é?

Sem problemas, no começo estava funcionando bem o código mas descobri que ele sofre variação como você disse pelas linhas a mais, como sensor de temperatura, então pesquisei sobre o comando delay e descobri também que ele trava o programa em no mínimo delay(x) x milisegundos, por isso tem vezes que ele atrasa mais ou menos não é pra este tipo de função e sim para coisas menos precisas, como loaders, ou algo para design, simetria... Achei muito caro a Shield, o CI custa R$7 e a shield R$55 talocoo;;; pela diferença eu faç a shield aqui em casa...

Sou de Caxias do Sul - RS... e vc?

BOEIRA:
Sou de Caxias do Sul - RS…
e vc?

Curitiba-Pr

's

Use a função setTime(h,m,s,D,M,Y);

#include <Time.h>
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
int PINO13 = 13;
int BOTAOLIGA = 0; // variable for reading the pushbutton status
int PINO6 = 6;
int VAR1 = 0;

void setup() {
setTime(9,46,00,06,13,2014);

Usa o RTC interno do arduino, não varia com aexecução do codigo. 8)

Ola Amigo eu testei no meu Uno e funcionou corretamente Só alterei a pinagem

#include <LiquidCrystal.h>
LiquidCrystal lcd(0x3F,2,1,0,4,5,6,7,3, POSITIVE); //essa é a pinagem  LCD no MEGA.
int segundo;
int minuto;
int hora;
int cont;
void setup() {
  lcd.begin(16, 2);
  hora = 0;
  minuto = 0;
  segundo = 0;
  lcd.print("  _Relogio_ ");
}
void loop() {
  lcd.setCursor(1,0);
  lcd.print("  _Relogio_ ");
  lcd.setCursor(4,1); 
segundo=segundo + 1;
delay(1000);
  if (segundo >=60) {
segundo = 0;
minuto = minuto+1;
cont = cont+10;
lcd.clear();
lcd.setCursor(1,0);
  lcd.print("  _Relogio_ ");
lcd.setCursor(4,1);
  }
  if (minuto >=60){
    segundo =0;
    minuto=0;
    hora = hora+1;
    cont = 0;
    lcd.clear();
     lcd.setCursor(1,0);
  lcd.print("  _Relogio_ ");
     lcd.setCursor(4,1);
  } 
if ((segundo < 10) & (minuto < 10) & (hora < 10)) {
lcd.print("0");    
lcd.print(hora);
lcd.print(":");
lcd.print("0");
lcd.print(minuto);
lcd.print(":");
lcd.print("0");
lcd.print(segundo);
}
if ((segundo >= 10) & (minuto >= 10) & (hora >= 10)){   
lcd.print(hora);
lcd.print(":");
lcd.print(minuto);
lcd.print(":");
lcd.print(segundo);
}
if ((segundo >= 10) & (minuto < 10) & (hora < 10))
{
lcd.print("0");    
lcd.print(hora);
lcd.print(":");
lcd.print("0");
lcd.print(minuto);
lcd.print(":");
lcd.print(segundo);
}
if ((segundo >= 10) & (minuto < 10) & (hora >= 10)){    
lcd.print(hora);
lcd.print(":");
lcd.print("0");
lcd.print(minuto);
lcd.print(":");
lcd.print(segundo);
}
if ((segundo >= 10) & (minuto >= 10) & (hora < 10)) {
lcd.print("0");    
lcd.print(hora);
lcd.print(":");
lcd.print(minuto);
lcd.print(":");
lcd.print(segundo);
}
if ((segundo < 10) & (minuto >= 10) & (hora >= 10)){   
lcd.print(hora);
lcd.print(":");
lcd.print(minuto);
lcd.print(":");
lcd.print("0");
lcd.print(segundo);
}
if ((segundo < 10) & (minuto >= 10) & (hora < 10)) {
lcd.print("0");    
lcd.print(hora);
lcd.print(":");
lcd.print(minuto);
lcd.print(":");
lcd.print("0");
lcd.print(segundo);
}
if ((segundo < 10) & (minuto < 10) & (hora >= 10)) {   
lcd.print(hora);
lcd.print(":");
lcd.print("0");
lcd.print(minuto);
lcd.print(":");
lcd.print("0");
lcd.print(segundo);
}
}

Já tentou trabalhar com a função millis()? Se eu não me engano essa função é relacionada ao clock interno do Arduino.