Um relógio com LCD 16x2 e RTC DS1307.
O circuito RTC é composto basicamente pelo CI DS1307 e um Cristal de 32,768KHz. Deve ser alimentado separadamente por uma bateria de 3v (CR2032), e seu consumo é tão baixo que a bateria dura anos.
Para controle e leitura do RTC, optei em utilizar uma biblioteca feita pelo Álvaro Justen. Fiz algumas modificações e deixei disponível para download nesses links:
Segue o esquema elétrico do circuito e o código fonte do microcontrolador.
Valeu!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 | /*------------------------- RELOGIO DIGITAL - RTC FELLIPE COUTO - 10/03/2012 -------------------------*/ #include <Wire.h> #include <DS1307.h> //Biblioteca do RTC. #include <LiquidCrystal.h> //Biblioteca do LCD. LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //LCD(RS, E, D4, D5, D6, D7) char dateTime[20]; char date[10]; char time[10]; int RTCValues[7]; int x = 0; int y = 0; int count = 0; void setup(){ DS1307.begin(); lcd.begin(16, 2); //LCD com 16 colunas e 2 linhas //setDate(15, 05, 12, 1, 15, 00); //(DIA, MES, ANO, SEMANA, HORA, MINUTO) } void loop(){ getDateTime(); count++; if (count == 1){ randomSeed(analogRead(0)); //Para o random ficar aleatorio, sem repetir a sequencia. do{ y = random(5); //Valores de 0 a 4. } while (y == x); x = y; } else{ if (count >= 7){ count = 0; } } switch(x){ case 0: relogioHora(); break; case 1: relogioData(); break; case 2: relogioDataHora(); break; case 3: relogioFeriado(); break; case 4: relogio(); break; } } void getDateTime(){ DS1307.getDate(RTCValues); if (RTCValues[6] > 59){ //Se o segundo for mais que 59, o RTC não esta ajustado. setDateTime(01, 01, 12, 1, 00, 00); //(DIA, MES, ANO, SEMANA, HORA, MINUTO) Ajusta o RTC. } else{ //RTCValues [0]=ANO, [1]=MES, [2]=DIA-MES, [3]=DIA-SEMANA, [4]=HORA, [5]=MINUTO, [6]=SEGUNDO sprintf(dateTime, "%02d/%02d/20%02d %02d:%02d", RTCValues[2], RTCValues[1], RTCValues[0], RTCValues[4], RTCValues[5]); sprintf(date, "%02d/%02d/%02d", RTCValues[2], RTCValues[1], RTCValues[0]); sprintf(time, "%02d:%02d:%02d", RTCValues[4], RTCValues[5], RTCValues[6]); } } void setDateTime(int dia, int mes, int ano, int semana, int hora, int minuto){ DS1307.setDate(ano, mes, dia, semana, hora, minuto, 00); //(ANO, MES, DIA-MES, DIA-SEMANA, HORA, MINUTO, SEGUNDO) /*--------------------- ANO: de 00 a 99 MES: de 01 a 12 DIA DO MES, de 01 a 31 DIA DA SEMANA, de 1 (domingo) a 7 (sabado) HORA: de 0 a 23 MINUTO: de 0 a 59 SEGUNDO: de 0 a 59 ---------------------*/ } void relogioHora(){ lcd.clear(); lcd.setCursor(0,0); lcd.print("----------------"); lcd.setCursor(4,1); lcd.print(time); delay(1000); } void relogioData(){ if (count == 1){ lcd.clear(); lcd.setCursor(16,0); lcd.print(fromNumberToWeekDay(RTCValues[3], 2)); //1=EN, 2=PT for (int i=0; i<16; i++){ //Leva para esquerda lcd.scrollDisplayLeft(); delay(100); } lcd.setCursor(24,1); LetraPorLetra(date); } if (count == 0){ for (int i=0; i<16; i++){ //Leva para esquerda lcd.scrollDisplayLeft(); delay(100); } } delay(500); } void relogioDataHora(){ lcd.clear(); lcd.setCursor(0,0); lcd.print(date); lcd.setCursor(8,1); lcd.print(time); delay(1000); } void relogioFeriado(){ lcd.clear(); lcd.setCursor(4,0); lcd.print(date); lcd.setCursor(0,1); //Segunda linha if (RTCValues[1] == 01 & RTCValues[2] == 01){ lcd.print("FELIZ ANO NOVO!!"); } else if (RTCValues[1] == 04 & RTCValues[2] == 21){ lcd.print("VIVA TIRADENTES!"); } else if (RTCValues[1] == 05 & RTCValues[2] == 01){ lcd.print("DIA DO TRABALHO!"); } else if (RTCValues[1] == 9 & RTCValues[2] == 07){ lcd.print(" INDEPENDENCIA!"); } else if (RTCValues[1] == 10 & RTCValues[2] == 12){ lcd.print("NOSSA PADROEIRA!"); } else if (RTCValues[1] == 11 & RTCValues[2] == 02){ lcd.print(" DIA DE FINADOS"); } else if (RTCValues[1] == 11 & RTCValues[2] == 15){ lcd.print("SALVE REPUBLICA!"); } else if (RTCValues[1] == 12 & RTCValues[2] == 24){ lcd.print(" Ho Ho Ho...!"); } else if (RTCValues[1] == 12 & RTCValues[2] == 25){ lcd.print(" FELIZ NATAL!"); } else if (RTCValues[1] == 12 & RTCValues[2] == 31){ lcd.print("ADEUS ANO VELHO!"); } else{ lcd.clear(); lcd.setCursor(0,0); lcd.print(fromNumberToWeekDay(RTCValues[3], 2)); //1=EN, 2=PT lcd.setCursor(8,1); lcd.print(time); } delay(1000); } void relogio(){ lcd.clear(); lcd.setCursor(1,0); lcd.print(". EfeitoNerd ."); delay(300); lcd.setCursor(0,1); LetraPorLetra(dateTime); delay(4000); for (int i=0; i<16; i++){ //Leva para direita lcd.scrollDisplayRight(); delay(100); } count = 0; } void LetraPorLetra(String texto){ int tamanho = texto.length(); for (int i=0; i<tamanho; i++){ lcd.print(texto.substring(i,i+1)); delay(130); } } |
Muito bom teu blog cara! Me ajudou muito!
ResponderExcluirBom dia amigo, gostei muito do seu projeto, so tenho uma duvida
ResponderExcluirapos fazer o circuito como vc faz para acertar a hora e a data ..?
Opa!
ExcluirPor falta de tempo, não fiz a parte de ajuste da data/hora através de hardware.
Ajustei direto via código mesmo.
É usando o SetDate(). Conforme esta no código (comentado) em Setup().
setDate(15, 05, 12, 1, 15, 00); //(DIA, MES, ANO, SEMANA, HORA, MINUTO)
ola fellipe testei seu codigo no meu arduino 0022 e nao rodo porque sera isso me ajude desde ja te agradeço
ResponderExcluirBom dia!
ExcluirHouve algumas modificações no software Arduino, a partir da versão 1.0, e efetuei essas alterações na biblioteca DS1307.h
Baixa a nova versão no site que vai rodar legal. ( http://arduino.cc/en/Main/Software )
Abraços!!
Muito bom seu tutorial, mas estava querendo usar outra porta do arduino com RTC vc saberia como mudar?
ResponderExcluirNão olhei sobre mudar as portas, mas acredito que seja apenas mudar o endereço dentro da biblioteca. Vou dar uma olhada nisso e posto depois.
ExcluirAbraços!
Boa noite Fellipe.
ResponderExcluirDei uma estudada na sua implementação e tentei fazer uma com "acerto" de horas, so que esta so funcionou quando eu utilizei somente os segundos do rtc para incrementar minuto segundo e a data, so que quando desligo meu arduino a hora nao continua contando, queria saber se vc me da uma dica de como fazer um laço onde a hora e data que colocarei no compilador fique "ligada" a hora do RTC. Valeu, bom trabalho o seu!
Boa tarde, Leandro!
ExcluirVocê conectou a bateria de 3v no DS1307?! E além da bateria, não pode esquecer de conectar o pino 4 do RTC ao GND do Arduino. São os terras que devem estar conectados entre si. Pelo o que eu entendi, aparetemente seria isso. Assim, quando o Arduino é desligado o RTC permanece ligado, pela bateria 3v (CR2032).
Seria isso?!
Obrigado pelo elogio ao blog!
Abraços!
Olá Felipe,
ResponderExcluirTentei alterar o código para visualizar a data no seguinte formato, DD-MM-AA. Porém não funcionou. Tenho que alterar o código ou a biblioteca? Obrigado
Olá Joaldo!
ExcluirO formato de data está sendo setado em forma de máscara no 'sprintf' dentro da função getDateTime() no próprio código.
- sprintf(dateTime, "%02d/%02d/20%02d %02d:%02d",...)
Abraços!
Pois já tinha feito essa alteração no 'sprintf', mas os valores não estão batendo com que estou setando. olha ai o código:
Excluir#include
#include
char dateTime[22],n;
int RTCValues[7], i = 0, year, month, dayOfMonth, dayOfWeek, hour, minute,
second;
void setup()
{
Serial.begin(9600);
Serial.println("Para ajustar as horas digite A");
DS1307.begin();
}
void loop()
{
Serial.available();
n = Serial.read();
if(n == 'A')
{
Serial.println("Please enter date and time in the format \"DD-MM-AAAA HH:MM:SS D\",");
Serial.println("Where D is the number of the day of week (1 = Sunday, 7 = Saturday).");
Serial.println("Example: 2011-04-23 02:25:27 7");
while (i < 21)
{
if (Serial.available())
{
char c = Serial.read();
dateTime[i] = c;
i++;
}
}
dateTime[i] = '\0';
dayOfMonth = 10 * (dateTime[2] - 48) + (dateTime[3] - 48);
month = 10 * (dateTime[5] - 48) + (dateTime[6] - 48);
year = 10 * (dateTime[8] - 48) + (dateTime[9] - 48);
dayOfWeek = (dateTime[20] - 48);
hour = 10 * (dateTime[11] - 48) + (dateTime[12] - 48);
minute = 10 * (dateTime[14] - 48) + (dateTime[15] - 48);
second = 10 * (dateTime[17] - 48) + (dateTime[18] - 48);
DS1307.setDate(year, month, dayOfMonth, dayOfWeek, hour, minute, second);
Serial.println("Date and time set!");
Serial.println("Reading data from RTC...");
}
else
{
DS1307.getDate(RTCValues);
sprintf(dateTime, "%02d-%02d-20%02d %02d:%02d:%02d", RTCValues[2],
RTCValues[1], RTCValues[0], RTCValues[4], RTCValues[5],
RTCValues[6]);
Serial.println(dateTime);
delay(1000);
}
}
Ola.Estou com dificuldades no uso do DS1307 com Arduino Mega 2560.Cheguei a comprar um igual ao do link (Já vem montado)__http://www.emartee.com/product/42059/Tiny%20RTC%20DS1307%20Shield%20V2.0
ResponderExcluirmas não consegui usa-lo com os exemplo/tutoriais que achei na net.Comprei o componentes e montei eu mesmo,mas o comportamento foi o mesmo.O monitor serial sempre mostra os mesmos valores,sem alteração.Poderia me ajudar?
Boa noite! Um erro comum, que eu por descuido cometo algumas vezes é esquecer de conectar os terras (gnd). O GND do arduino deve estar conectado ao GND do RTC. Já testou com outro arduino?! Abraços!
ExcluirEste comentário foi removido pelo autor.
ResponderExcluirdeu erro fromNumberToWeekDay(RTCValues[3], 2)NAO foi declerada neste escopo
ResponderExcluiro que fazer??????????????
Bom dia!
ExcluirEssa função faz parte da biblioteca DS1307.h que eu fiz alterações, conforme comentado no código. Corrigi alguns erros e fiz algumas modificações para se ajustar melhor as minhas necessidades. Você pode fazer o download da biblioteca: http://www.4shared.com/rar/HIZiPup2/DS1307.html
Abraços!
Cara tem como me ajudar? Preciso do relogio, mas sem o lcd.
ResponderExcluirSomente mostrando no Serial Monitor.
Bom dia!
ExcluirConforme as linhas 66 a 68 do fonte, a data e hora estão nas variáveis 'dateTime', 'date', e 'time'. Para exibi-las no serial monitor, pode-se usar, por exemplo: Serial.println(dateTime);
Devo só trocar em todas as linhas então?
ExcluirDessa forma vc consegue visualizar a data e a hora. Para obter os efeitos de texto, é necessário o LCD.
ExcluirBom dia,
ResponderExcluirFiz o teste do seu programa e não está aparecendo nada no display.
Na função:
void relogioDataHora()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(date);
lcd.print("alo"); // implementei este comando no intuito de descobrir se esta função está funcionando. Apareceu só ela.
lcd.setCursor(8,1);
lcd.print(time);
delay(1000);
o que pode ser?
Só apareceu a mensagem "alo"?! Se for isso, as variáveis date e time estão vindo vazias. Pode ser algum problema no RTC (DS1307). Verificou se ele está retornando data/hora corretamente?
ExcluirOlá felipe teria com me da uma ajuda neste seu projeto?
ResponderExcluirachei muito legal!
abraços!
Bom dia Felipe, parabens pelo seu blog!
ResponderExcluirSeguinte ja baixei e instalei a sua biblioteca atualizada do DS1307, porem quando rodo a compilação apareçe a seguinte falha (error: 'fromNumberToWeekDay' was not declared) como se não tivese na biblioteca, o que estou fazendo errado, tem alguma dica?
Obrigado pela sua atenção!
Bom dia Felipe, parabens pelo seu blog!
ResponderExcluirSeguinte ja baixei e instalei a sua biblioteca atualizada do DS1307, porem quando rodo a compilação apareçe a seguinte falha (error: 'fromNumberToWeekDay' was not declared) como se não tivese na biblioteca, o que estou fazendo errado, tem alguma dica?
Obrigado pela sua atenção!
Bom dia, Delmir! Obrigado pelo elogio!
ExcluirEstranho esse erro. A princípio não tive nenhuma ideia do que poderia ser. Vc está usando qual versão do software arduino?
Abraços!
Boa Tarde
ResponderExcluirAchei interessante seu código
Tentei rodar aqui para poder estudar ele e implementar num controlador aqui que estou projetando, mas não rodou.
Estou utilizando o software mais recente do Arduino 1.0.5
Boa tarde!
ExcluirA biblioteca está dentro da pasta libraries do diretório do software Arduino?!
Já rodei com a versão 1.0.5 e funciona!
Abraços!
alguem tem ideia se rola com o pic 18f4550
ResponderExcluir?
O fonte e a biblioteca é para arduino.
ExcluirBoa Noite. Cara to fazendo um Projeto TCC e to com a ideia de fazer um "Alimentador Automatico para cão". vi varias ideias no youtube como essa que estou tendo fazer "http://www.youtube.com/watch?v=snba1JM-PoM" ...Problema meu tah em como fazer os menus pra adcionar hora ... vai ser bem simples não presisa de RTC somente demonstrativo. Tem alguma ideia de como começar igual a esse do video ? to quebrando a cabeça ... Começando agora com Arduino.
ResponderExcluirBom dia! Para esse tipo de menu, a idéia a seguir é trabalhar com variáveis. Usa-se uma variável de controle, onde por ela vc vai verificando nas condicionais do fonte qual a mensagem (menu) deve ser mostrada no momento. Resumidamente, é isso. Abraços!
ExcluirOla Felipe, estou com este código abaixo para acionar um aquecedor de água e precisava incluir um relógio digital nele, que eu tivesse á opção também alem do controle de temperatura, ajustar por botões há hora de ligar e desligar o circuito, tem como você me ajudar?
ResponderExcluir#include
int contador=0;
int inicialTempMax = 40; // Temperatura Máxima padrão
int inicialTempo = 10; // Tempo Padrão
int estado = 1; // estado da luz de fundo
int contaMax = 0;
int contaMin = 1;
int luzFundo = 7;
const int Aquecedor = 8; // Pino Aquecedor
const int buttonMenu = 11; // Pino Botão Menu
const int buttonPinMais = 12; // Pino Botão Aumenta
const int buttonPinMenos = 13; // Pino Botão Diminui
LiquidCrystal lcd(10, 6, 5, 4, 3, 2);
int pinoSensor = 0; //pino que está ligado o terminal central do LM35 (porta analogica 0)
int valorLido = 0; //valor lido na entrada analogica
float temperatura = 0; //valorLido convertido para temperatura
int tempoEntreAcao = 1000; // tempo à esperar entre ligar o ac e acionar a tecla atalho
// VOID SETUP
void setup(){
lcd.begin(16, 2);
pinMode(Aquecedor, OUTPUT);
pinMode(buttonMenu, INPUT);
pinMode(buttonPinMais, INPUT);
pinMode(buttonPinMenos, INPUT);
pinMode(luzFundo, OUTPUT);
digitalWrite(luzFundo, HIGH);
Serial.begin(9600);
}
//VOID LOOP
void loop(){
// 1.A #### LENDO A TEMPERATURA E CONVERTENDO #####
valorLido = analogRead(pinoSensor);
temperatura = (valorLido * 0.00488); // (5V / 1023) = 0.00488 (precisão do A/D) OBS: USANDO LM35
temperatura = temperatura * 100; //Converte milivolts para graus celcius, lembrando que a cada 10mV equivalem a 1 grau celcius
// botao que seleciona a funcao do menu
if (digitalRead(buttonMenu) == HIGH) {
delay(250);
contador=contador+1;
}
if (contador>3){ // zera o contador para voltar ao inicio tenho tres opcoes apenas
contador=0;
}
// switch para puxar a funcao de cada opcao do menu
switch(contador){
case 0:
inicio();
break;
case 1:
tempMaxAjuste();
break;
case 2:
tempMinAjuste();
break;
case 3:
luz();
break;
}
delay (tempoEntreAcao);;
ligarDesligar();
} // FIM DO LOOP
// SECAO DAS FUNCOES
//funcao da tela inicial
void inicio()
{
lcd.setCursor(0,0);
lcd.print("MAX TEMP/ATUAL");
lcd.setCursor(0,1);
lcd.print(inicialTempMax);
lcd.print("C");
lcd.print(" ");
lcd.print(temperatura);
lcd.print("C");
}
// Funcao de ajuste da temperatura Maxima
void tempMaxAjuste()
{
if(digitalRead(buttonPinMais) == HIGH && contador == 1){
inicialTempMax = inicialTempMax ++;
}
if(digitalRead(buttonPinMenos) == HIGH && contador == 1){
inicialTempMax = inicialTempMax --;
}
// imprime no LCD
lcd.setCursor(0,0);
lcd.print("Temp/ MAX / Liga");
lcd.setCursor(0,1);
lcd.print(inicialTempMax);
lcd.print(" ");
}
// Funcao de Ajuste da Temperatura Minima
void tempMinAjuste()
{
if(digitalRead(buttonPinMais) == HIGH && contador == 2){
}
if(digitalRead(buttonPinMenos) == HIGH && contador == 2){
}
// imprime no LCD
}
// Funcao de ajuste do tempo de leitura da temperatura
void luz()
{
if(digitalRead(buttonPinMais) == HIGH && contador == 3){
digitalWrite(luzFundo, HIGH);
estado = 1;
}
if(digitalRead(buttonPinMenos) == HIGH && contador == 3){
digitalWrite(luzFundo, LOW);
estado = 0;
}
// imprime no LCD
lcd.setCursor(0,0);
lcd.print(" Luz de Fundo ");
lcd.setCursor(0,1);
if(estado == 1){
lcd.print("Ligado ");
}
lcd.setCursor(0,1);
if(estado == 0){
lcd.print("Desligado ");
}
}
// funcao que controla o A/C responsavel por medir a temperatura e ligar ou desligar o A/C
void ligarDesligar(){
if(temperatura > inicialTempMax && contaMax == 0){ // SE A TEMPERATURA ESTIVER MAIOR DO QUE A max DEFINIDA NO LCD LIGA O AR
digitalWrite(Aquecedor, HIGH);
}
else if(temperatura < inicialTempMax && contaMax == 0){ // SE A TEMPERATURA ESTIVER MENOR DO QUE A min DEFINIDA NO LCD DESLIGA O AR
digitalWrite(Aquecedor, LOW);
delay (tempoEntreAcao);
}
}
Ola Felipe, estou com este código abaixo para acionar um aquecedor de água e precisava incluir um relógio digital nele, que eu tivesse á opção também alem do controle de temperatura, ajustar por botões há hora de ligar e desligar o circuito, tem como você me ajudar?
ResponderExcluir#include
int contador=0;
int inicialTempMax = 40; // Temperatura Máxima padrão
int inicialTempo = 10; // Tempo Padrão
int estado = 1; // estado da luz de fundo
int contaMax = 0;
int contaMin = 1;
int luzFundo = 7;
const int Aquecedor = 8; // Pino Aquecedor
const int buttonMenu = 11; // Pino Botão Menu
const int buttonPinMais = 12; // Pino Botão Aumenta
const int buttonPinMenos = 13; // Pino Botão Diminui
LiquidCrystal lcd(10, 6, 5, 4, 3, 2);
int pinoSensor = 0; //pino que está ligado o terminal central do LM35 (porta analogica 0)
int valorLido = 0; //valor lido na entrada analogica
float temperatura = 0; //valorLido convertido para temperatura
int tempoEntreAcao = 1000; // tempo à esperar entre ligar o ac e acionar a tecla atalho
// VOID SETUP
void setup(){
lcd.begin(16, 2);
pinMode(Aquecedor, OUTPUT);
pinMode(buttonMenu, INPUT);
pinMode(buttonPinMais, INPUT);
pinMode(buttonPinMenos, INPUT);
pinMode(luzFundo, OUTPUT);
digitalWrite(luzFundo, HIGH);
Serial.begin(9600);
}
//VOID LOOP
void loop(){
// 1.A #### LENDO A TEMPERATURA E CONVERTENDO #####
valorLido = analogRead(pinoSensor);
temperatura = (valorLido * 0.00488); // (5V / 1023) = 0.00488 (precisão do A/D) OBS: USANDO LM35
temperatura = temperatura * 100; //Converte milivolts para graus celcius, lembrando que a cada 10mV equivalem a 1 grau celcius
// botao que seleciona a funcao do menu
if (digitalRead(buttonMenu) == HIGH) {
delay(250);
contador=contador+1;
}
if (contador>3){ // zera o contador para voltar ao inicio tenho tres opcoes apenas
contador=0;
}
// switch para puxar a funcao de cada opcao do menu
switch(contador){
case 0:
inicio();
break;
case 1:
tempMaxAjuste();
break;
case 2:
tempMinAjuste();
break;
case 3:
luz();
break;
}
delay (tempoEntreAcao);;
ligarDesligar();
} // FIM DO LOOP
// SECAO DAS FUNCOES
//funcao da tela inicial
void inicio()
{
lcd.setCursor(0,0);
lcd.print("MAX TEMP/ATUAL");
lcd.setCursor(0,1);
lcd.print(inicialTempMax);
lcd.print("C");
lcd.print(" ");
lcd.print(temperatura);
lcd.print("C");
}
// Funcao de ajuste da temperatura Maxima
void tempMaxAjuste()
{
if(digitalRead(buttonPinMais) == HIGH && contador == 1){
inicialTempMax = inicialTempMax ++;
}
if(digitalRead(buttonPinMenos) == HIGH && contador == 1){
inicialTempMax = inicialTempMax --;
}
// imprime no LCD
lcd.setCursor(0,0);
lcd.print("Temp/ MAX / Liga");
lcd.setCursor(0,1);
lcd.print(inicialTempMax);
lcd.print(" ");
}
// Funcao de Ajuste da Temperatura Minima
void tempMinAjuste()
{
if(digitalRead(buttonPinMais) == HIGH && contador == 2){
}
if(digitalRead(buttonPinMenos) == HIGH && contador == 2){
}
// imprime no LCD
}
// Funcao de ajuste do tempo de leitura da temperatura
void luz()
{
if(digitalRead(buttonPinMais) == HIGH && contador == 3){
digitalWrite(luzFundo, HIGH);
estado = 1;
}
if(digitalRead(buttonPinMenos) == HIGH && contador == 3){
digitalWrite(luzFundo, LOW);
estado = 0;
}
// imprime no LCD
lcd.setCursor(0,0);
lcd.print(" Luz de Fundo ");
lcd.setCursor(0,1);
if(estado == 1){
lcd.print("Ligado ");
}
lcd.setCursor(0,1);
if(estado == 0){
lcd.print("Desligado ");
}
}
// funcao que controla o A/C responsavel por medir a temperatura e ligar ou desligar o A/C
void ligarDesligar(){
if(temperatura > inicialTempMax && contaMax == 0){ // SE A TEMPERATURA ESTIVER MAIOR DO QUE A max DEFINIDA NO LCD LIGA O AR
digitalWrite(Aquecedor, HIGH);
}
else if(temperatura < inicialTempMax && contaMax == 0){ // SE A TEMPERATURA ESTIVER MENOR DO QUE A min DEFINIDA NO LCD DESLIGA O AR
digitalWrite(Aquecedor, LOW);
delay (tempoEntreAcao);
}
}
Muito bom, fiz algumas alterações no codio para acertar a hora com botoes, mas me ajudou muito!!! Parabens
ResponderExcluirOlá Felipe. Parabéns e obrigado por disponibilizar o seu projeto; aliás, vários projetos! É possível usar o DS3231 em lugar do DS1307? Mudaria alguma coisa no código?
ResponderExcluirBom dia! É possível sim, porém será necessário alterar alguns pontos no código fonte. As chamadas onde retornamos a informação do DS1307 para a forma como é retornado as informações do DS3231. As bibliotecas são diferentes. Não seriam grandes modificações.
ExcluirColega como faço para instalar meu Display C12
ResponderExcluirBom dia! Seria esse display da postagem com módulo I2C?! Na postagem "Validador de CPF" uso o display com o módulo I2C. Abraços!
Excluir