LCD 16×2 com módulo I2C e RTC DS1307
Vamos mostrar como utilizar dois módulos I2C no mesmo barramento, juntando o display LCD 16×2 com módulo I2C (que mostrei no artigo Como utilizar o módulo I2C com display LCD), ao módulo relógio de tempo real (RTC) DS1307. Juntando o módulo I2C e o módulo RTC DS1307, temos o resultado abaixo:
Apesar de não ter falado ainda sobre o módulo RTC DS1307 aqui no blog, eu já mostrei como utilizar o CI DS1307, que segue o mesmo esquema de ligação. A diferença é que no módulo temos também alguns pinos de saída que podem ser utilizados para ligar os dispositivos em cascata.
Circuito módulo I2C e RTC DS1307 com Arduino
O módulo I2C pode ser soldado diretamente no display, ou montado em uma protoboard, como no circuito abaixo. Apesar da utilização de vários componentes, perceba que temos as demais portas do Arduino totalmente livres para utilização com motores, sensores ou outros dispositivos.
Para comunicação entre o Arduino Uno e os módulos, vamos usar os dois pinos da interface I2C: A4 – SDA e A5 – SCL (se for um Arduino Mega, pinos 20 e 21).
Usando o esquema acima, podemos ligar vários sensores e módulos I2C no mesmo barramento, mas eles não podem ter o mesmo endereço. Os dispositivos geralmente já vem com um endereço pré-definido, e em alguns casos você pode alterar esse endereço para evitar conflitos, como é o caso do módulo I2C, que permite selecionar um endereço diferente alterando a configuração dos pinos A0, A1 e A2:
Se você não souber qual o endereço do módulo, ou se deseja apenas confirmar se o dispositivo I2C está respondendo, pode utilizar no Arduino um programa chamado I2C Scanner:
// -------------------------------------- // i2c_scanner // // Version 1 // This program (or code that looks like it) // can be found in many places. // For example on the Arduino.cc forum. // The original author is not know. // Version 2, Juni 2012, Using Arduino 1.0.1 // Adapted to be as simple as possible by Arduino.cc user Krodal // Version 3, Feb 26 2013 // V3 by louarnold // Version 4, March 3, 2013, Using Arduino 1.0.3 // by Arduino.cc user Krodal. // Changes by louarnold removed. // Scanning addresses changed from 0...127 to 1...119, // according to the i2c scanner by Nick Gammon // http://www.gammon.com.au/forum/?id=10896 // Version 5, March 28, 2013 // As version 4, but address scans now to 127. // A sensor seems to use address 120. // // // This sketch tests the standard 7-bit addresses // Devices with higher bit address might not be seen properly. #include <Wire.h> void setup() { Wire.begin(); Serial.begin(9600); Serial.println("\nI2C Scanner"); } void loop() { byte error, address; int nDevices; Serial.println("Scanning..."); nDevices = 0; for(address = 1; address < 127; address++ ) { // The i2c_scanner uses the return value of // the Write.endTransmisstion to see if // a device did acknowledge to the address. Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0) { Serial.print("I2C device found at address 0x"); if (address<16) Serial.print("0"); Serial.print(address,HEX); Serial.println(" !"); nDevices++; } else if (error==4) { Serial.print("Unknow error at address 0x"); if (address<16) Serial.print("0"); Serial.println(address,HEX); } } if (nDevices == 0) Serial.println("No I2C devices found\n"); else Serial.println("done\n"); delay(5000); // wait 5 seconds for next scan }
Esse programa varre o barramento I2C e mostra no serial monitor o endereço dos dispositivos conectados:
No caso, foram encontrados 3 dispositivos: o módulo I2C do display no endereço 0x27, o CI DS1307 no endereço 0x68 e a EEPROM do módulo RTC (CI 24C32), no endereço 0x50.
Mostrando data e hora no display
Juntando tudo isso, temos o programa que lê os dados do módulo DS1307 (data e hora), e envia essas informações para um display LCD 16×2.
Retire as barras duplas da linha SelecionaDataeHora() (linha 22) para executar a rotina que vai ajustar a data e hora do seu módulo. Nas variáveis das linhas 86 à 92 você define os novos valores.
// Programa : Modulo I2C Display e Modulo DS1307 // Autor : Arduino e Cia #include "Wire.h" #include <LiquidCrystal_I2C.h> // Modulo RTC no endereco 0x68 #define DS1307_ADDRESS 0x68 // Modulo I2C display no endereco 0x27 LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE); byte zero = 0x00; void setup() { Wire.begin(); Serial.begin(9600); lcd.begin (16,2); //A linha abaixo pode ser retirada apos setar a data e hora //SelecionaDataeHora(); } void loop() { // Le os valores (data e hora) do modulo DS1307 Wire.beginTransmission(DS1307_ADDRESS); Wire.write(zero); Wire.endTransmission(); Wire.requestFrom(DS1307_ADDRESS, 7); int segundos = ConverteparaDecimal(Wire.read()); int minutos = ConverteparaDecimal(Wire.read()); int horas = ConverteparaDecimal(Wire.read() & 0b111111); int diadasemana = ConverteparaDecimal(Wire.read()); int diadomes = ConverteparaDecimal(Wire.read()); int mes = ConverteparaDecimal(Wire.read()); int ano = ConverteparaDecimal(Wire.read()); // Mostra os dados no display lcd.setCursor(0,0); lcd.print(" "); // Acrescenta o 0 (zero) se a hora for menor do que 10 if (horas <10) lcd.print("0"); lcd.print(horas); lcd.print(":"); // Acrescenta o 0 (zero) se minutos for menor do que 10 if (minutos < 10) lcd.print("0"); lcd.print(minutos); lcd.setCursor(2,1); // Mostra o dia da semana switch(diadasemana) { case 0:lcd.print("Dom"); break; case 1:lcd.print("Seg"); break; case 2:lcd.print("Ter"); break; case 3:lcd.print("Quar"); break; case 4:lcd.print("Qui"); break; case 5:lcd.print("Sex"); break; case 6:lcd.print("Sab"); } lcd.setCursor(6,1); // Acrescenta o 0 (zero) se dia do mes for menor do que 10 if (diadomes < 10) lcd.print("0"); lcd.print(diadomes); lcd.print("/"); // Acrescenta o 0 (zero) se mes for menor do que 10 if (mes < 10) lcd.print("0"); lcd.print(mes); lcd.print("/"); lcd.print(ano); } void SelecionaDataeHora() //Seta a data e a hora do DS1307 { byte segundos = 20; //Valores de 0 a 59 byte minutos = 16; //Valores de 0 a 59 byte horas = 15; //Valores de 0 a 23 byte diadasemana = 4; //Valores de 0 a 6 - 0=Domingo, 1 = Segunda, etc. byte diadomes = 9; //Valores de 1 a 31 byte mes = 4; //Valores de 1 a 12 byte ano = 15; //Valores de 0 a 99 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(segundos)); Wire.write(ConverteParaBCD(minutos)); Wire.write(ConverteParaBCD(horas)); Wire.write(ConverteParaBCD(diadasemana)); Wire.write(ConverteParaBCD(diadomes)); Wire.write(ConverteParaBCD(mes)); Wire.write(ConverteParaBCD(ano)); Wire.write(zero); 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) ); }
Gostou deste post com módulo I2C e RTC DS1307? Veja também o post onde mostro como ligar um display LCD 16×2 I2C na Raspberry Pi!
Muito Obrigado. Seu blog é excelente, estava tentando achar o endereço de um modulo SHT15. Ajudou muito.
Boa noite,
Muito obrigado, aguardo sua visita sempre que possível. 🙂
Abraço !
Muito bom, esta funcionando perfeitamente, parabens!!!! 🙂
PARABÉNS PELOS PROJETO DO BLOG, MUITO BOM!!
Valeu Argel ! Abraço ! 🙂
Muito bom, parabéns. Como ficaria este código usando: Shield lcd 16×02; RTC 1307; shield Ethernet; Sendo, controlando via Internet 8 relay.Uma página simples em HTML. E visualizando a hora no LCD e na página de controle dos relay's.
Boa noite Roberto,
Obrigado. Em breve estarei publicando um post falando sobre o ethernet shield com página em html/php.
Abraço !
Boa tarde, gosto muito do site, amigo gostaria de saber como ficaria o esquema se fosse o modulo ds1302?
Boa tarde Paulo,
Eu tenho um post especifico sobre o DS1302, tente juntar esses dois programas:
http://www.arduinoecia.com.br/2014/11/arduino-modulo-rtc-ds1302.html
Abraço !
olá, o seu é dos poucos blogues que eu consigo entender, Pode-me dizer como fasso para por tambem os segundos? Obrigado!
Boa noite,
Depois da linha 51, acrescente essas duas linhas:
lcd.print(":");
lcd.print(segundos);
Abraço !
Era exatamente o que eu procurava…muito obrigado!!!
Legal poder ajudar. 🙂
Abraço!
Descobri um errinho ai nesse codigo. Que quanto é o diadasemana DOMINGO ele não é zero… e sim 7. Somente corrigir as linhas:
// Mostra o dia da semana
switch(diadasemana)
{
case 7: lcd.print("Dom"); // Substituir o case 0 por case 7.
break;
void SelecionaDataeHora() //Seta a data e a hora do DS1307
{
byte diadasemana = 4; //Valores de 1 a 7 – 7=Domingo, 1 = Segunda, etc.
Bom dia!
Estranho, pode ser algum problema com versão de biblioteca, porque o meu circuito/programa realmente utilizam o zero como domingo..
De qualquer forma, obrigado pela dica! 🙂
Abraço!
Eu conseguiria adicionar nesse projeto um sensor DHT 11 e um módulo de cartão SD??
Como posso fazer isso?
Boa tarde Brendo,
Eu tenho projetos com DHT11 e também com módulos cartão SD aqui no site, dê uma verificada, por favor.
Abraço!
Posso um usar um rtc 3231 no lugar deste?
Bom dia,
Pode sim, o 3231 é um ótimo RTC, e é mais preciso do que o DS1307.
Abraço!
Parabéns pelo blog, eu utilizo um DS3231 e quando faço o scanner ele aparece dois endereços, 0x57 e 0x68, sabe me dizer porque? Obrigado.
Bom dia Evandro,
Um endereço é o do RTC propriamente dito, e o outro é da memória EEPROM que ele tem (AT24C32)
Abraço!
boa tarde o meu nao deu certo como faco para baixar essa biblioteca ele nao reconhece??? desculpe sou iniciante um amador rsrsrs
Boa tarde,
Que erro está apresentando ?
Abraço!
Ola, bom dia,
Gostaria de saber se já montou esse circuito com outro micrcontrolador como o Pic. Digo isso pois estou tentando fazê-lo funcionar com um PIC 18f4550 a 20MHz, simulando no Proteus e compilando no MikroC. Na simulação a hora do display demora muito para atualizar, 1 segundo demora quase 3. Acredito que seja devido ao fato do barramento i2c estar "carregado" por se comunicar con dois dispositivos "simultaneamente". Baixei um projeto pronto semelhante, porem usando LCD normal e funciona perfeitamente a 1Hz. Tem alguma idéia do que pode ser?
Oi Jonathan,
Infelizmente não. Usei apenas com Arduino.
Abraço!
Olá, bom dia,
faz algum tempo que tento utilizar um controlador i2c. Porem não obtive sucesso pois endereçava de forma errada. com seu tutorial encontrei o endereço e esta tudo funcionando as mil maravilha. muito obrigado.
sucesso ai na empreitada.
vlw.
Valeu. Abraço! 🙂
Boa tarde, primeiramente parabéns pelo excelente trabalho, e segundo, como faço para resetar os valores de min, seg e hr?
Boa noite,
Atualize os valores na linha 22 do programa, e retire o comentário (barra dupla).
Abraço e obrigado!
Boa Noite! Gostaria de saber como colocar botoes de ajuste das horas/ data, seria de muita ajdua, nao tem nenhum forum aqui no site? obrigado!
Amigo gostei muito do seus post. queria saber se vc poderia me ajudar com meu TCC de Tec em Eletrotécnica? tenho um kit arduino uno, um lcd com modulo i2c e 2 placas relé sendo um com 4 e 1 com 2 relé. quero montar um QTA (quadro de distribuição automático) e nos testes com o lcd só imprime a primeira coluna com. o módulo i2c o endereço é o 0x27 aí não entendi se precisa fazer algum jump no A0, A1 e A2. Aí minha dúvida é: terei que soldar um jump nas ilhas A0, A1 E A2 PARA FICAR 1 1 1. Seria isso? obrigado pela atenção.
Oi Marx,
Exato, para o endereço 0x27, coloque um jumper/solda no A0, A1 e A2.
Abraço!
vc teria alum projeto de QTA que possa me ajudar? esqueci de informar que tbm já tenho um gerador de 5kva. obrigado pela atenção
Olá, boa noite. como faço para fazer a leitura do sensor dht11 com o módulo Ic2?
Oi Fagner,
Esse módulo é específico para uso com display LCD 16×2 ou 20×4.
Abraço!
Obrigado pela atenção!
Mas não entendi muito sua fala (sou meio leigo!). O meu lcd é 16×2 e estou usando o módulo Ic2. Não posso usar o mesmo para fazer a leitura do sensor dht11?
Aproveitando a oportunidade, posso utilizar a biblioteca LiquidCrystal para controlar o lcd 128×64? queria mostrar os valores de outro sensor em forma de tabela, pensei que este lcd seria possível. Obrigado, e parabéns pelo site! De muito ajuda!
Oi Fagner,
Sem problemas. Eu acho que não consegui explicar direito. vamos lá.. rs
Esse módulo I2C jé específico para se comunicar com o display. Você não pode colocar ele para se comunicar, por exemplo, com o DHT11, que usa outro tipo de comunicação com o Arduino.
Então, o que você pode fazer é sim utilizar o display com esse módulo I2C, e ao mesmo tempo usar o DHT11, mas ligado à outro pino do Arduino. Desse jeito, o Arduino vai ler as informações do DHT11, e exibir no display.
Quanto ao display 128×64, o modelo que eu testei usa outra pinagem, outro tipo de comunicação com o Arduino, então esse módulo I2C não vai funcionar com ele, ok ? Existem módulo I2C específicos para utilizar com display gráfico 128×64.
Abraço!
Ola. Parabéns pelo trabalho.
Eu estou fazendo o mesmo esquema que acima, mas com a biblioteca DS1307, quando utilizo um programa somente com o RTC enviando os dados pela serial está tudo perfeito, mas quando eu coloco esse programa junto que contem a parte do LCD ele começa a informar errado o horário e data, na forma: Hora : 27:85:85 Data : 85.85.@5 5.85.@5 Mesmo eu não alterando nada de um código para o outro.
Sabe oq pode ser?
Boa noite,
Vi uma dica hoje sobre isso: coloca o Serial.begin() depois do lcd.begin(), na seção void setup().
Depois me diga se funcionou, por favor.
Abraço!
Ola teria como fazer com dispertador e botões para acertar a hr de despertar e um buzzer para soar o alarme… to procurando algo parecido e nao acho obrigado. .
Boa noite João,
Ainda não tenho, mas está na lista de futuros posts. Que lcd vc está usando ?
Abraço!
To usando o display 16 x 2
Boa amigo,
Estou atras de um programa para arduino uno, com programação de relógio em um display 16×2, que mande um sinal para o RF433mhz, o arduino funcionária como um radio relógio, você tem alguma programação parecida?
Seria da seguinte forma, seria como um relógio ao vc realizar a programação para despertar, ele acionava o modulo RF433MHZ para o seu receptor receber o sinal e executar o alarme.
abraço…
o indereço do ic2 ta dando 0x3f o q fazer
Oi João,
Coloque esse endereço na linha 11, vai ficar assim:
LiquidCrystal_I2C lcd(0x3f,2,1,0,4,5,6,7,3, POSITIVE);
Abraço!
Olá, estava quase jogando fora meu módulo I2C pois não funcionava de forma alguma… Obrigado pela dica!!!
Abs
Edu
Parabéns pelo blog!
Uma pergunta… Eu preciso fazer a leitura do RTC e imprimir uma página web em meu projeto. Contudo as interrupções do RTC estão bloqueando a requisição/entrega da página web.
Vocês sabem como corrigir isso? Eu penso em reduzir as interrupções do RTC com intervalos maiores, sabem como fazer isso?
Um abraço!
Boa noite,
Acho que não entendi o problema.. Quais interrupções ?
Abraço!
Primeiramente parabéns pelo site!
Comprei o Arduino na Alliexpress,chegou faz uma semana e estou aprendendo muito pelo site!!
Comprei o kit completo(avançado) com rfid e um kit de 37 sensores tbm! haha
Amigo, estou querendo colocar no meu lcd o seguinte(com programas separados eu já consegui, graças a sua ajuda)
1- Tela print(" Infos do Dia e Aperte botão");
2- Umidade e Temperatura.
3-Hora!
A minha programação foi um pouco baseada na sua, a dúvida é a seguinte:
Primeiramente não sei mexer com botões hahaha!
Como colocar apenas um botão para alternar os menus?
Não sei fazer a programação disso, posso enviar meu programa e você corrige e me ensina esta pequena parte?, se puder me ajudar, agradeço!
Segue o meu programa!
LCD I2C + DHT11 + DS1302 + MENU!
#include
#include
#include
#include
#include
#define I2C_ADDR 0x3F // <<—– Add your address here. Find it from I2C Scanner
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
//Declarações do 1302
#define SCK_PIN 4
#define IO_PIN 3
#define RST_PIN 2
//Declarações do DHT
#define dht_dpin A3 //Pino 2 Data do sensor vai ligado a porta A3 do Arduino
//Declarações do Botão
???
LiquidCrystal_I2C lcd(I2C_ADDR, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin, D6_pin, D7_pin);
dht DHT; //Inicialização do sensor
int contador=1;
char state=1; // variável que guarda posição atual do menu
//============================================== SETUP
void setup()
{
pinMode(botao, INPUT);
lcd.begin(16, 2); // Iniciando a biblioteca do LCD
lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
lcd.setBacklight(HIGH);
lcd.home (); // go home
}
//LOOP
void loop()
{
switch (state)
{ // Define checa qual tela atual
case 1: // executado quando na TELA 1
switch (CheckButton())
{
case //VARIAVEL BOTAO?
lcd.clear(); Set_state(2); // antes de mudar de tela, é necessário limpar o display com a função lcd.clear()
break;
default: // Caso nenhum botão tenha sido apertado, ela executa a set_state
Set_state(1); // mesmo assim para atualizar o display.
}
break;
case 2: // executado quando na TELA 2
switch (CheckButton())
{
case //VARIAVEL BOTAO?
lcd.clear(); Set_state(3);
break;
default:
Set_state(2);
}
break;
case 3: // executado quando na TELA 3
switch (CheckButton())
{
case //VARIAVEL BOTAO?
lcd.clear(); Set_state(1);
break;
default:
Set_state(3);
}
break;
default: ;
}
}
// FIM da função LOOP
// CheckButton
char CheckButton()
{
// NÃO SEI FAZER
}
}
//============================================== Set_state
void Set_state(char index) {
state = index; // Atualiza a variável state para a nova tela
switch (state) { // verifica qual a tela atual e exibe o conteúdo correspondente
case 1: //==================== state 1
lcd.setCursor(0,0);
lcd.print("Infos do Dia");
lcd.setCursor(0,1);
lcd.print( "Aperte o Botao"); // Alteração de Menu
break;
case 2: //==================== state 2
DHT.read11(dht_dpin); //Faz leitura das informações do sensor
lcd.setCursor(0,0);
lcd.print("Umidade = ");
lcd.print(DHT.humidity);
lcd.print(" % ");
lcd.setCursor(0,1);
lcd.print("Temp = ");
float tempnova = DHT.temperature +3; // Teste Vinii – Subbindo 3 Graus a Temperatura do Sensor- Detalhe: Coloquei aqui para dar tempo de o Sensor fazer a medida,somar e colocar no display.
lcd.print(tempnova);
lcd.println(" C ");
delay(3000);
lcd.clear();
lcd.print("Fazendo Nova Med");
delay(2000);
break;
case 3: //==================== state 3
/* Os comandos abaixo servem para acertar data e hora retire
as barras e acerte os valores, carregue o programa, recoloque
as barras e recarregue o programa novamente*/
rtc.setDOW(3); //Define o dia da semana
rtc.setTime(02, 16, 00); //Define o horario
rtc.setDate(23, 6, 2016); //Define o dia, mes e ano
lcd.setCursor(4, 0);
lcd.print(rtc.getTimeStr());
lcd.setCursor(1,1);
lcd.print(rtc.getDateStr(FORMAT_SHORT));
lcd.setCursor(9, 1);
lcd.print(" – ");
lcd.setCursor(12, 1);
lcd.print(rtc.getDOWStr(FORMAT_SHORT));
delay (1000);
break;
default: ;
}
}
Amigo, quando compilo o programa da esse erro: 'POSITIVE' was not declared in this scope.
Agradeço desde já.
estou com mesmo problema. Conseguiu resolver?
Este erro ocorre por causa da versão da biblioteca, utilize a mesma versão do tutorial, ou vá em arquivo-> exemplos e abra um exemplo do lcd i2c da biblioteca que vc tem instalada e veja como está declarado. No meu caso é declarado como LiquidCrystal_I2C lcd (0x27, 16, 2);
e qual e a versao, não achei no tópico
Eu estou tentando usar um LCD 16×2 com módulo I2C (Sou iniciante). Usando esse sketch, consta que nenhum dispositivo I2C foi encontrado. E agora? Tenho um Arduino uno com ATmega 328p
Boa noite,
Por favor verifique as ligações, talvez seja o SCL invertido com o SDA. Tente também ligar apenas o display no Arduino e veja se ele reconhece algum dispositivo I2C.
Abraço!
Olá, estou com problemas na compilação no arduino mega, tendo em vista que meu modulo é o ds3231 e o display já está conectado ao modulo i2c
Arduino: 1.6.11 (Windows 10), Placa:"Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"
C:UsersValdemir DiasDocumentsArduinosketch_Relogio_com_display_megasketch_Relogio_com_display_mega.ino: In function 'void setup()':
sketch_Relogio_com_display_mega:19: error: 'lcd' was not declared in this scope
lcd.begin (16,2);
^
C:UsersValdemir DiasDocumentsArduinosketch_Relogio_com_display_megasketch_Relogio_com_display_mega.ino: In function 'void loop()':
sketch_Relogio_com_display_mega:41: error: 'lcd' was not declared in this scope
lcd.setCursor(0,0);
^
C:UsersValdemir DiasDocumentsArduinosketch_Relogio_com_display_megasketch_Relogio_com_display_mega.ino: In function 'void SelecionaDataeHora()':
sketch_Relogio_com_display_mega:93: error: 'DS1307_ADDRESS' was not declared in this scope
Wire.beginTransmission(DS1307_ADDRESS);
^
Foram encontradas múltiplas bibliotecas para "LiquidCrystal_I2C.h"
Usado: C:UsersValdemir DiasDocumentsArduinolibrariesLiquidCrystal_I2C
Não usado: C:UsersValdemir DiasDocumentsArduinolibrariesNewliquidCrystal
Não usado: C:Program Files (x86)ArduinolibrariesLiquidCrystalI2C
exit status 1
'lcd' was not declared in this scope
Este relatório teria mais informações com
"Mostrar a saida detalhada durante a compilação"
opção pode ser ativada em "Arquivo -> Preferências"
Pessoal alguem pode me ajuda, estou tendo problema nos SEGUNDOS, eles não se atualiza, ficam no mesmo da compilação, ja li diversos tutoriais, e todos no mesmo os SEGUNDOS não muda.. oque faço ?
Ola pessoal vocês poderiam me ajuda, sou novo nesse mundo de arduino, estou com um problema, ja li diversos tutoriais, mas sempre resulta no mesmo, OS SEGUNDOS NÃO SE ATUALIZA, fica no mesmo da compilação, ja coloquei resistor, varios códigos e sempre a mesma coisa.. o que faço ?
Parabéns pelo projeto, ajudou muito !!!
Estou tentando usar esse código para acionar um rele as 6:00 e as 22:00 e desligar 20 minutos apos os horários.
Pensei em usar uma variável para receber o horário e comparar mas não sei como fazer isso alguém poderia me ajudar ?
Alguém sabe se essa programação funciona fora do computador compilado ? se não como faço pra conseguir.O meu não esta funcionando, obrigado.
me ajuda no i2c_scanner apareceu
Scanning…
I2C device found at address 0x3F !
done
Oi Marcelo,
Legal, agora basta trocar na linha 11 isso:
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE);
por isso:
LiquidCrystal_I2C lcd(0x3F,2,1,0,4,5,6,7,3, POSITIVE);
Abraço!
O meu deu diferente :/
Scanning…
I2C device found at address 0x3F !
done
Oi,
primeiramente parabens pelo blog.
Tenho um Arduino Uno e utilizo o Windows 8.1.
Fiz as ligações como seu tutorial mostra, RTC DS1307 e LCD 16,2 com I2C integrado.
mas quando tento carregar e rodar o I2C Scanner da erro com a seguinte mensagem : Placa em COM4 não esta disponivel, mas a placa do arduino tava ligada na COM4. Ai tenho que reinstalar a IDE do Arduino para que a porta COM4 volte a funcionar com o Arduino.
Oque pode esta acontecendo ??
Oi Martin,
Estranho isso hein. Você chegou a testar só com a placa Arduino para ver se o defeito não está em algum outro componente do circuito ?
Abraço!
Adilson
Um ajuda, por favor…
O meu até está mostrando a data e hora, porém logo quando ligo vai beleza:
18:38
Ter 20/02/17
Passados alguns segundos o display buga:
18:385
Terr28/02/1716
O que poderia ser?
Parece erro no setcursor, experimente usar lcd.clear(); e ve se resolve, a tela fica piscando mas se resolver é só ajustar os set cursor.
Qual programa você usa para fazer a simulação no computador?
Eu utilizo o programa da AutoDesk mas falta muitos componentes, inclusive esse módulo I2C não tem lá.
Obrigado.
Oi Marcelo,
Para desenhar eu uso o Fritzing (fritzing.org).
Abraço!
Olá, gostaria de saber o por que do meu display nao exibir nenhum caracter, apenas acende e apaga, segue abaixo o codigo de teste utilizado:
#include
#include
#include
// Inicializa o display no endereco 0x27
LiquidCrystal_I2C lcd(0x3F,2,1,0,4,5,6,7,3, POSITIVE);
void setup()
{
lcd.begin (16,2);
}
void loop()
{
lcd.setBacklight(HIGH);
lcd.setCursor(0,0);
lcd.print("Teste");
lcd.setCursor(0,1);
lcd.print("1 2 3 4 5");
delay(1000);
lcd.setBacklight(LOW);
delay(1000);
}
Muito obrigado desde já, abraço.
Olá!
Gostaria de saber qual software que foi utilizado para gerar as imagens da simulação dos circuitos?
Oi Marcelo,
Para o desenho do circuito eu uso o Fritzing (fritzing.org).
Abraço!
Adilson
como faço para utilizar o esp8266_01 com o lcd 16×2 ,ao invés do node mcu
Boa tarde,
Infelizmente no ESP-01 vc não vai ter portas suficientes para fazer isso.
Abraço!
Adilson
Bom dia!!!
Usei esse código no meu mega2560 com display i2c 20×4 ele não grava o dia da semana certo e depois das 00:00hrs só aumenta os minutos no outro dia fui olhar estava marcando 00:205 na hora e data 19/07/17565 não sei porque alterou o ano também alguém pode me ajudar.
Toda vez que soldo meu lcd com o i2c direto meu lcd para de funcionar, fica mostrando quadrados pretos, o que eu to fazendo errado?
obrigado cara por compartilhar o que você tem de conhecimento ajudou muito vlw!
Valeu…:) Abraço!
Adilson
era o sketch que eu procurava, existe uma versão com o ajuste feito porum ou dois botões ? e ficaria dificil implementar um alarme com horarios diferentes para ligar/desligar leds ?
'POSITIVE' was not declared in this scope
pode me ajudar
HA UM ERRO NA TABELA VERDADE
Tem razão. 🙂
Corrigido. Muito obrigado!
Abraço.
Adilson
boa noite o meu esta dando erro noLiquidCrystal lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE);
Oi Leonardo,
Você está usando a mesma biblioteca do post? Existem várias bibliotecas de display I2C e algumas delas podem apresentar esse erro de "positive".
Abraço!
Adilson
Boa noite,
Como faz para mudar o mês o dia e a hora