Relógio com RTC,Garagino,Display LCD 16x2,Ajuda com programação por favor.

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Relógio com RTC,Garagino,Display LCD 16x2,Ajuda com programação por favor.

Mensagem  Mateus-Bueno em Qui 11 Set - 9:20

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;
    }
  }

 }

Mateus-Bueno

Mensagens : 1
Data de inscrição : 18/07/2014

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum