sexta-feira, 3 de julho de 2015

Criando um relógio com Arduíno Mega, um RTC e um display


Biblioteca virtuaborixRTC

//Programa: Imprime data e hora no display lcd 16x2
//Baseado no virtuabotixRTC
//Biblioteca virtuabotixRTC
#include <virtuabotixRTC.h>        
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
// Determina os pinos ligados ao modulo
// RTC(clock, data, rst)
virtuabotixRTC RTC(6, 7, 8);
//Meu Logo
byte a[8]= {B11111,B11111,B11000,B11111,B11111,B00000,B00000,B00000,};
byte b[8]= {B11111,B11111,B10001,B11011,B11011,B11011,B11111,B11111,};
byte c[8]= {B11111,B11111,B00011,B11111,B11111,B00000,B00000,B00000,};
byte d[8]= {B11111,B11011,B11011,B11011,B11011,B11011,B11011,B11111,};


void setup()
{

  lcd.init();                    
  lcd.backlight();
  lcd.createChar(1, a);
  lcd.createChar(2, b);
  lcd.createChar(3, c);
  lcd.createChar(4, d);
  //Coloca meu logo no final do display, utilizando as colunas 13, 14 e 15
  lcd.setCursor(13,0); //Coloca o cursor na coluna 0, linha 0
  lcd.write(1); //Escreve o simbolo
  lcd.setCursor(14,0); //Coloca o cursor na coluna 0, linha 0
  lcd.write(2); //Escreve o simbolo
  lcd.setCursor(15,0); //Coloca o cursor na coluna 0, linha 0
  lcd.write(3); //Escreve o simbolo
  lcd.setCursor(14,1); //Coloca o cursor na coluna 0, linha 0
  lcd.write(4); //Escreve o simbolo


  // Informacoes iniciais de data e hora
  /*depois da data e hora ajustada, comente a linha abaixo e compile novamente,
  ou seja, a hora ja foi armazenada no RTC e agora se você "recompilar"
  a hora e a data já estão em andamento.
  O Macete é colocar a hora com um minuto adiantado e quado chegar a três segundos antes
  da hora que você ajustou clique para carregar, depois é só recompilar comentando a linha
  abaixo
  */
  // (segundos, minutos, hora, dia da semana, dia do mes, mes, ano)
  //RTC.setDS1302Time(00, 47, 20, 6, 03, 07, 2015);
}

void loop()
{
  // Le as informacoes do CI
  RTC.updateTime();

  // Imprime as informacoes no serial monitor
  lcd.setCursor(0,0);
  //Serial.print("Data: ");
  // Chama a rotina que imprime o dia da semana
  printdayofweek(RTC.dayofweek);
  //lcd.print(" ");
  lcd.print(RTC.dayofmonth);
  lcd.print("/");
  lcd.print(RTC.month);
  lcd.print("/");
  lcd.print(RTC.year);
  lcd.setCursor(0,1);
    // Adiciona um 0 caso o valor da hora seja <10
  if (RTC.hours < 10)
  {
    lcd.print("0");
  }
  lcd.print(RTC.hours);
  lcd.print(":");
  // Adiciona um 0 caso o valor dos minutos seja <10
  if (RTC.minutes < 10)
  {
    lcd.print("0");
  }
  lcd.print(RTC.minutes);
  lcd.print(":");
  // Adiciona um 0 caso o valor dos segundos seja <10
  if (RTC.seconds < 10)
  {
    lcd.print("0");
  }
  lcd.print(RTC.seconds);
  delay( 1000);
}

void printdayofweek(int day)
{
  switch (day)
  {
    case 1:
    lcd.print("Sun");
    break;
    case 2:
    lcd.print("Mon");
    break;
    case 3:
    lcd.print("Tue");
    break;
    case 4:
    lcd.print("Wed");
    break;
    case 5:
    lcd.print("Thu");
    break;
    case 6:
    lcd.print("Fri");
    break;
    case 7:
    lcd.print("Sat");
    break;
  }
}



Nenhum comentário:

Postar um comentário