Projeto Arduino
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

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

Ir para baixo

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

Mensagem  Mateus-Bueno 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

Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos