/*******************************************************************************
https://www.robocore.net/tutoriais/primeiros-passos-rtc-ds1307-com-arduino
Real Time Clock : Primeiros Passos (v1.0)
Exibicao das informacoes data, hora e dia da semana com Modulo RTC DS1307.
Copyright 2019 RoboCore.
Escrito por Matheus Cassioli (29/04/2019).
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version (<https://www.gnu.org/licenses/>).
*******************************************************************************/
//Inclui as bibliotecas
#include <Wire.h>
#include "RTClib.h"
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
//As linhas de codigo a seguir devem ser comentadas, ou descomentadas, de acordo com o modelo de RTC utilizado (DS1307 ou DS3132)
RTC_DS1307 rtc; //Objeto rtc da classe DS1307
//RTC_DS3231 rtc; //Objeto rtc da classe DS3132
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire, -1);
char diasDaSemana[7][12] = {"Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sab"}; //Dias da semana
int tempo = 0;
void setup () {
Serial.begin(9600); //Inicializa a comunicacao serial
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
if (! rtc.begin()) { //Se o RTC nao for inicializado, faz
Serial.println("RTC NAO INICIALIZADO"); //Imprime o texto
display.setTextSize(1); //Defina o tamanho da fonte usando a função setTextSize();
display.setTextColor(WHITE); //Defina a cor da fonte com setTextColor().O parâmetro WHITE define fonte branca e fundo preto;
display.setCursor(0, 10); //Defina a posição onde o texto começa usando setCursor(x,y). O parâmetro x (em pixels) é a posição na largura do display que o texto inicia. O parâmetro y (em pixels) define a posição na altura que o texto inicial.
display.print("RTC NAO INICIALIZADO"); //Você pode enviar o texto para o display usando print();
display.display(); //você precisa usar a função display() para realmente exibir o texto na tela.
while (1); //Trava o programa
}
//rtc.adjust(DateTime(2019, 3, 6, 15, 24, 00));//Ajusta o tempo do RTC para a data e hora definida pelo usuario.
delay(100); // 100 Milissegundos
}
void loop () {
DateTime agora = rtc.now(); // Faz a leitura de dados de data e hora
if (tempo != agora.minute()) {
Serial.print("Tempo anterior: ");
Serial.println(tempo);
tempo = agora.minute();
Serial.print("Tempo atual: ");
Serial.println(tempo);
}
display.clearDisplay();
display.fillRect(0, 0, 128, 14, WHITE);
display.setTextSize(1); //Defina o tamanho da fonte usando a função setTextSize();
display.setTextColor(BLACK, WHITE); //Defina a cor da fonte com setTextColor().O parâmetro WHITE define fonte branca e fundo preto;
display.setCursor(26, 3); //Defina a posição onde o texto começa usando setCursor(x,y). O parâmetro x (em pixels) é a posição na largura do display que o texto inicia. O parâmetro y (em pixels) define a posição na altura que o texto inicial.
display.print("Bausch + Lomb");
display.setTextSize(1); //Defina o tamanho da fonte usando a função setTextSize();
display.setTextColor(WHITE); //Defina a cor da fonte com setTextColor().O parâmetro WHITE define fonte branca e fundo preto;
display.setCursor(8, 16);
display.print("Contador de moldes");
display.setCursor(5, 27); //Defina a posição onde o texto começa usando setCursor(x,y). O parâmetro x (em pixels) é a posição na largura do display que o texto inicia. O parâmetro y (em pixels) define a posição na altura que o texto inicial.
display.print(diasDaSemana[agora.dayOfTheWeek()]);
display.print(" ");
if (agora.day() < 10){
display.print("0");
}
display.print( agora.day());
display.print('/');
if (agora.month() < 10){
display.print("0");
}
display.print(agora.month());
display.print('/');
display.print(agora.year());
display.print(" ");
if (agora.hour() < 10){
display.print("0");
}
display.print(agora.hour());
display.print(":");
if (agora.minute() < 10){
display.print("0");
}
display.print(agora.minute());
display.setCursor(5, 39);
display.print("Hora atual:");
display.setCursor(5, 53);
display.print("Hora anter:");
display.display();
Serial.print("Data: ");
Serial.print(agora.day(), DEC); //Imprime dia
Serial.print('/'); //Imprime barra
Serial.print(agora.month(), DEC); //Imprime mes
Serial.print('/'); //Imprime barra
Serial.print(agora.year(), DEC); //Imprime ano
Serial.print(" / Dia da semana: "); //Imprime texto
Serial.print(diasDaSemana[agora.dayOfTheWeek()]); //Imprime dia da semana
Serial.print(" / Horas: "); //Imprime texto
Serial.print(agora.hour(), DEC); //Imprime hora
Serial.print(':'); //Imprime dois pontos
Serial.print(agora.minute(), DEC); //Imprime os minutos
Serial.print(':'); //Imprime dois pontos
Serial.print(agora.second(), DEC); //Imprime os segundos
Serial.println(); //Quebra de linha
delay(10); // 1 Segundo
}