Relógio com RTC,Garagino,Display LCD 16x2,Ajuda com programação por favor.
Página 1 de 1
Relógio com RTC,Garagino,Display LCD 16x2,Ajuda com programação por favor.
Estou com um problema, montei um relógio com RTC,Display 16x2 e garagino. Na programação consegui fazer o relógio aparecer no LCD com sucesso. O problema é que agora eu quero transformar o relógio em um despertador. Eu consegui programar para setar a hora e o minuto do despertador, mas ele não está armazenando o valor que eu seto, ele fica sempre em zero. Se alguem puder me ajudar, eu preciso salvar o valor editado no despertador. estou mandando aba por aba do projeto(em sequência). Obrigado
PRIMEIRA ABA
#include
#include
#define DS1307_ADDRESS 0x68
#define botao_start 7
#define botao_stop 8
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Configura os pinos do Arduino para se comunicar com o LCD
byte zero = 0x00;
boolean botao_start_ativo = 0;
boolean botao_stop_ativo = 0;
unsigned short hora_setada, minuto_setado, segundo_setado;
unsigned short dia, mes, ano, hora, data, diadasemana, num_despertadores;
unsigned short desp_hora,desp_min;
boolean set_hora = true;
boolean set_minuto = false;
boolean set_segundo = false;
void setup()
{
Serial.begin(9600);
lcd.begin(16,2);
Wire.begin();
pinMode(botao_start,INPUT);
pinMode(botao_stop,INPUT);
set_dia_mes_ano();
set_horario();
converter_data_e_hora();
set_despertador();
}
void loop()
{
mostrarrelogio();
data_real();
Serial.print(hora_setada);
Serial.println(desp_hora);
}
SEGUNDA ABA
void converter_data_e_hora()
{
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(zero); //Stop no CI para que o mesmo possa receber os dados
//As linhas abaixo escrevem no CI os valores de
//data e hora que foram colocados nas variaveis acima
Wire.write(ConverteParaBCD(segundo_setado));
Wire.write(ConverteParaBCD(minuto_setado));
Wire.write(ConverteParaBCD(hora_setada));
Wire.write(ConverteParaBCD(diadasemana));
Wire.write(ConverteParaBCD(dia));
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) );
}
TERCEIRA ABA
void data_real()
{
if((hora_setada==23) && (minuto_setado==59) && (segundo_setado==59))
{
dia = dia +1;
}
if((dia==31) && (hora_setada==23) && (minuto_setado==59) && (segundo_setado==59))
{
mes = mes +1;
}
if((mes==12) && (dia==31) && (hora_setada==23) && (minuto_setado==59) && (segundo_setado==59))
{
ano = ano +1;
}
}
QUARTA ABA
void mostrarrelogio()
{
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(zero);
Wire.endTransmission();
Wire.requestFrom(DS1307_ADDRESS, 7);
segundo_setado = ConverteparaDecimal(Wire.read());
minuto_setado = ConverteparaDecimal(Wire.read());
hora_setada = ConverteparaDecimal(Wire.read() & 0b111111);
diadasemana = ConverteparaDecimal(Wire.read());
dia = ConverteparaDecimal(Wire.read());
mes = ConverteparaDecimal(Wire.read());
ano = ConverteparaDecimal(Wire.read());
//Mostra a data e a Hora no LCD
lcd.setCursor(0,0);
lcd.print("Data:");
if(dia<10)
{
lcd.setCursor(5,0);
lcd.print("0");
lcd.print(dia);
} else
{
lcd.print(dia);
}
lcd.print("/");
if(mes<10)
{
lcd.setCursor(8,0);
lcd.print("0");
lcd.print(mes);
}else
{
lcd.print(mes);
}
lcd.print("/");
lcd.print(ano);
lcd.setCursor(0,1);
lcd.print("Hora:");
if(hora_setada<10)
{
lcd.setCursor(5,1);
lcd.print("0");
lcd.print(hora_setada);
}else
{
lcd.print(hora_setada);
}
lcd.print(":");
if(minuto_setado<10)
{
lcd.setCursor(8,1);
lcd.print("0");
lcd.print(minuto_setado);
}else
{
lcd.print(minuto_setado);
}
lcd.print(":");
if(segundo_setado<10)
{
lcd.setCursor(11,1);
lcd.print("0");
lcd.print(segundo_setado);
}else
{
lcd.print(segundo_setado);
}
}
QUINTA ABA
void set_despertador()
{
set_hora = true;
set_minuto = false;
unsigned short desp_hora,desp_min;
while(1)
{
botao_start_ativo = digitalRead(botao_start);
botao_stop_ativo = digitalRead(botao_stop);
lcd.setCursor(0,0);
lcd.print("Despertador:");
lcd.setCursor(0, 1);
lcd.print("H: ");
lcd.print(desp_hora);
lcd.setCursor(6,1);
lcd.print("M: ");
lcd.print(desp_min);
botao_start_ativo = digitalRead(botao_start);
botao_stop_ativo = digitalRead(botao_stop);
if ((botao_start_ativo == HIGH) && (set_hora == true))
{
desp_hora = desp_hora + 1;
if(desp_hora > 23)
{
lcd.clear();
desp_hora = 0;
}
delay(200);
}
if ((botao_start_ativo == HIGH) && (set_minuto == true))
{
desp_min = desp_min + 1;
if(desp_min > 59)
{
lcd.clear();
desp_min = 0;
}
delay(200);
}
if ((botao_stop_ativo == HIGH) && (set_hora == true))
{
set_hora = false;
set_minuto = true;
delay(200);
}
botao_start_ativo = digitalRead(botao_start);
botao_stop_ativo = digitalRead(botao_stop);
if ((botao_stop_ativo == HIGH) && (set_minuto == true))
{
set_hora = false;
set_minuto = false;
delay(200);
lcd.clear();
break;
}
}
}
SEXTA ABA
void set_dia_mes_ano()
{
lcd.clear();
boolean set_dia = true;
boolean set_mes = false;
boolean set_ano = false;
dia = 01;
mes = 01;
ano = 13;
while(1)
{
botao_start_ativo = digitalRead(botao_start);
botao_stop_ativo = digitalRead(botao_stop);
lcd.setCursor(0,0);
lcd.print("Dia");
lcd.setCursor(6,0);
lcd.print("Mes");
lcd.setCursor(12,0);
lcd.print("Ano");
lcd.setCursor(0,1);
lcd.print(dia);
lcd.setCursor(6,1);
lcd.print(mes);
lcd.setCursor(12,1);
lcd.print(ano);
if ((botao_start_ativo == HIGH) && (set_dia == true))
{
dia = dia + 1;
if(dia > 31)
{
lcd.clear();
dia = 1;
}
delay(200);
}
if ((botao_start_ativo == HIGH) && (set_mes == true))
{
mes = mes + 1;
if(mes > 12)
{
lcd.clear();
mes = 1;
}
delay(200);
}
if ((botao_start_ativo == HIGH) && (set_ano == true))
{
ano = ano + 1;
if(ano > 20)
{
lcd.clear();
ano = 13;
}
delay(200);
}
if ((botao_stop_ativo == HIGH) && (set_dia == true))
{
set_dia = false;
set_mes = true;
set_ano = false;
delay(200);
}
botao_start_ativo = digitalRead(botao_start);
botao_stop_ativo = digitalRead(botao_stop);
if ((botao_stop_ativo == HIGH) && (set_mes == true))
{
set_dia = false;
set_mes = false;
set_ano = true;
delay(200);
}
botao_start_ativo = digitalRead(botao_start);
botao_stop_ativo = digitalRead(botao_stop);
if ((botao_stop_ativo == HIGH) && (set_ano == true))
{
lcd.clear();
break;
}
}
}
SÉTIMA ABA
void set_horario()
{
lcd.clear();
while(1)
{
delay(200);
botao_start_ativo = digitalRead(botao_start);
botao_stop_ativo = digitalRead(botao_stop);
lcd.setCursor(0,0);
lcd.print("Hora");
lcd.setCursor(5,0);
lcd.print("Minuto");
lcd.setCursor(0,1);
lcd.print(hora_setada);
lcd.setCursor(6,1);
lcd.print(minuto_setado);
if ((botao_start_ativo == HIGH) && (set_hora == true))
{
hora_setada = hora_setada + 1;
if(hora_setada > 23)
{
lcd.clear();
hora_setada = 0;
}
delay(200);
}
if ((botao_start_ativo == HIGH) && (set_minuto == true))
{
minuto_setado = minuto_setado + 1;
if(minuto_setado > 59)
{
lcd.clear();
minuto_setado = 00;
}
delay(200);
}
if ((botao_stop_ativo == HIGH) && (set_hora == true))
{
set_hora = false;
set_minuto = true;
set_segundo = false;
delay(200);
}
botao_start_ativo = digitalRead(botao_start);
botao_stop_ativo = digitalRead(botao_stop);
if ((botao_stop_ativo == HIGH) && (set_minuto == true))
{
set_hora = false;
set_minuto = false;
delay(200);
lcd.clear();
break;
}
}
}
PRIMEIRA ABA
#include
#include
#define DS1307_ADDRESS 0x68
#define botao_start 7
#define botao_stop 8
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Configura os pinos do Arduino para se comunicar com o LCD
byte zero = 0x00;
boolean botao_start_ativo = 0;
boolean botao_stop_ativo = 0;
unsigned short hora_setada, minuto_setado, segundo_setado;
unsigned short dia, mes, ano, hora, data, diadasemana, num_despertadores;
unsigned short desp_hora,desp_min;
boolean set_hora = true;
boolean set_minuto = false;
boolean set_segundo = false;
void setup()
{
Serial.begin(9600);
lcd.begin(16,2);
Wire.begin();
pinMode(botao_start,INPUT);
pinMode(botao_stop,INPUT);
set_dia_mes_ano();
set_horario();
converter_data_e_hora();
set_despertador();
}
void loop()
{
mostrarrelogio();
data_real();
Serial.print(hora_setada);
Serial.println(desp_hora);
}
SEGUNDA ABA
void converter_data_e_hora()
{
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(zero); //Stop no CI para que o mesmo possa receber os dados
//As linhas abaixo escrevem no CI os valores de
//data e hora que foram colocados nas variaveis acima
Wire.write(ConverteParaBCD(segundo_setado));
Wire.write(ConverteParaBCD(minuto_setado));
Wire.write(ConverteParaBCD(hora_setada));
Wire.write(ConverteParaBCD(diadasemana));
Wire.write(ConverteParaBCD(dia));
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) );
}
TERCEIRA ABA
void data_real()
{
if((hora_setada==23) && (minuto_setado==59) && (segundo_setado==59))
{
dia = dia +1;
}
if((dia==31) && (hora_setada==23) && (minuto_setado==59) && (segundo_setado==59))
{
mes = mes +1;
}
if((mes==12) && (dia==31) && (hora_setada==23) && (minuto_setado==59) && (segundo_setado==59))
{
ano = ano +1;
}
}
QUARTA ABA
void mostrarrelogio()
{
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(zero);
Wire.endTransmission();
Wire.requestFrom(DS1307_ADDRESS, 7);
segundo_setado = ConverteparaDecimal(Wire.read());
minuto_setado = ConverteparaDecimal(Wire.read());
hora_setada = ConverteparaDecimal(Wire.read() & 0b111111);
diadasemana = ConverteparaDecimal(Wire.read());
dia = ConverteparaDecimal(Wire.read());
mes = ConverteparaDecimal(Wire.read());
ano = ConverteparaDecimal(Wire.read());
//Mostra a data e a Hora no LCD
lcd.setCursor(0,0);
lcd.print("Data:");
if(dia<10)
{
lcd.setCursor(5,0);
lcd.print("0");
lcd.print(dia);
} else
{
lcd.print(dia);
}
lcd.print("/");
if(mes<10)
{
lcd.setCursor(8,0);
lcd.print("0");
lcd.print(mes);
}else
{
lcd.print(mes);
}
lcd.print("/");
lcd.print(ano);
lcd.setCursor(0,1);
lcd.print("Hora:");
if(hora_setada<10)
{
lcd.setCursor(5,1);
lcd.print("0");
lcd.print(hora_setada);
}else
{
lcd.print(hora_setada);
}
lcd.print(":");
if(minuto_setado<10)
{
lcd.setCursor(8,1);
lcd.print("0");
lcd.print(minuto_setado);
}else
{
lcd.print(minuto_setado);
}
lcd.print(":");
if(segundo_setado<10)
{
lcd.setCursor(11,1);
lcd.print("0");
lcd.print(segundo_setado);
}else
{
lcd.print(segundo_setado);
}
}
QUINTA ABA
void set_despertador()
{
set_hora = true;
set_minuto = false;
unsigned short desp_hora,desp_min;
while(1)
{
botao_start_ativo = digitalRead(botao_start);
botao_stop_ativo = digitalRead(botao_stop);
lcd.setCursor(0,0);
lcd.print("Despertador:");
lcd.setCursor(0, 1);
lcd.print("H: ");
lcd.print(desp_hora);
lcd.setCursor(6,1);
lcd.print("M: ");
lcd.print(desp_min);
botao_start_ativo = digitalRead(botao_start);
botao_stop_ativo = digitalRead(botao_stop);
if ((botao_start_ativo == HIGH) && (set_hora == true))
{
desp_hora = desp_hora + 1;
if(desp_hora > 23)
{
lcd.clear();
desp_hora = 0;
}
delay(200);
}
if ((botao_start_ativo == HIGH) && (set_minuto == true))
{
desp_min = desp_min + 1;
if(desp_min > 59)
{
lcd.clear();
desp_min = 0;
}
delay(200);
}
if ((botao_stop_ativo == HIGH) && (set_hora == true))
{
set_hora = false;
set_minuto = true;
delay(200);
}
botao_start_ativo = digitalRead(botao_start);
botao_stop_ativo = digitalRead(botao_stop);
if ((botao_stop_ativo == HIGH) && (set_minuto == true))
{
set_hora = false;
set_minuto = false;
delay(200);
lcd.clear();
break;
}
}
}
SEXTA ABA
void set_dia_mes_ano()
{
lcd.clear();
boolean set_dia = true;
boolean set_mes = false;
boolean set_ano = false;
dia = 01;
mes = 01;
ano = 13;
while(1)
{
botao_start_ativo = digitalRead(botao_start);
botao_stop_ativo = digitalRead(botao_stop);
lcd.setCursor(0,0);
lcd.print("Dia");
lcd.setCursor(6,0);
lcd.print("Mes");
lcd.setCursor(12,0);
lcd.print("Ano");
lcd.setCursor(0,1);
lcd.print(dia);
lcd.setCursor(6,1);
lcd.print(mes);
lcd.setCursor(12,1);
lcd.print(ano);
if ((botao_start_ativo == HIGH) && (set_dia == true))
{
dia = dia + 1;
if(dia > 31)
{
lcd.clear();
dia = 1;
}
delay(200);
}
if ((botao_start_ativo == HIGH) && (set_mes == true))
{
mes = mes + 1;
if(mes > 12)
{
lcd.clear();
mes = 1;
}
delay(200);
}
if ((botao_start_ativo == HIGH) && (set_ano == true))
{
ano = ano + 1;
if(ano > 20)
{
lcd.clear();
ano = 13;
}
delay(200);
}
if ((botao_stop_ativo == HIGH) && (set_dia == true))
{
set_dia = false;
set_mes = true;
set_ano = false;
delay(200);
}
botao_start_ativo = digitalRead(botao_start);
botao_stop_ativo = digitalRead(botao_stop);
if ((botao_stop_ativo == HIGH) && (set_mes == true))
{
set_dia = false;
set_mes = false;
set_ano = true;
delay(200);
}
botao_start_ativo = digitalRead(botao_start);
botao_stop_ativo = digitalRead(botao_stop);
if ((botao_stop_ativo == HIGH) && (set_ano == true))
{
lcd.clear();
break;
}
}
}
SÉTIMA ABA
void set_horario()
{
lcd.clear();
while(1)
{
delay(200);
botao_start_ativo = digitalRead(botao_start);
botao_stop_ativo = digitalRead(botao_stop);
lcd.setCursor(0,0);
lcd.print("Hora");
lcd.setCursor(5,0);
lcd.print("Minuto");
lcd.setCursor(0,1);
lcd.print(hora_setada);
lcd.setCursor(6,1);
lcd.print(minuto_setado);
if ((botao_start_ativo == HIGH) && (set_hora == true))
{
hora_setada = hora_setada + 1;
if(hora_setada > 23)
{
lcd.clear();
hora_setada = 0;
}
delay(200);
}
if ((botao_start_ativo == HIGH) && (set_minuto == true))
{
minuto_setado = minuto_setado + 1;
if(minuto_setado > 59)
{
lcd.clear();
minuto_setado = 00;
}
delay(200);
}
if ((botao_stop_ativo == HIGH) && (set_hora == true))
{
set_hora = false;
set_minuto = true;
set_segundo = false;
delay(200);
}
botao_start_ativo = digitalRead(botao_start);
botao_stop_ativo = digitalRead(botao_stop);
if ((botao_stop_ativo == HIGH) && (set_minuto == true))
{
set_hora = false;
set_minuto = false;
delay(200);
lcd.clear();
break;
}
}
}
Mateus-Bueno- Mensagens : 1
Data de inscrição : 18/07/2014
Tópicos semelhantes
» Ajuda na programação de um robô
» Ajuda com a programação para tcc no arduino uno
» sd card com lcd 16x2 usando 74hc595
» [Dúvida] Programação de servo motores
» Medidor de consumo de energia
» Ajuda com a programação para tcc no arduino uno
» sd card com lcd 16x2 usando 74hc595
» [Dúvida] Programação de servo motores
» Medidor de consumo de energia
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos