Vamos mostrar como utilizar dois dispositivos I2C no mesmo barramento, juntando o display LCD 16x2 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, gerando 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 DS1307
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
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 | // -------------------------------------- // 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 16x2.
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.
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 | // 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) ); } |
Futuramente vamos ver como ligar esse módulo I2C com display LCD 16x2 ao Raspberry Pi. Até lá !
Muito Obrigado. Seu blog é excelente, estava tentando achar o endereço de um modulo SHT15. Ajudou muito.
ResponderExcluirBoa noite,
ExcluirMuito obrigado, aguardo sua visita sempre que possível. :)
Abraço !
PARABÉNS PELOS PROJETO DO BLOG, MUITO BOM!!
ResponderExcluirValeu Argel ! Abraço ! :-)
ExcluirMuito bom, parabéns. Como ficaria este código usando: Shield lcd 16x02; 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.
ResponderExcluirBoa noite Roberto,
ExcluirObrigado. 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?
ResponderExcluirBoa tarde Paulo,
ExcluirEu 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!
ResponderExcluirBoa noite,
ExcluirDepois da linha 51, acrescente essas duas linhas:
lcd.print(":");
lcd.print(segundos);
Abraço !
Era exatamente o que eu procurava...muito obrigado!!!
ResponderExcluirLegal poder ajudar. :-)
ExcluirAbraço!
Descobri um errinho ai nesse codigo. Que quanto é o diadasemana DOMINGO ele não é zero... e sim 7. Somente corrigir as linhas:
Excluir// 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!
ExcluirEstranho, 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??
ResponderExcluirComo posso fazer isso?
Boa tarde Brendo,
ExcluirEu 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?
ResponderExcluirBom dia,
ExcluirPode 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.
ResponderExcluirBom dia Evandro,
ExcluirUm 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
ResponderExcluirBoa tarde,
ExcluirQue erro está apresentando ?
Abraço!
Ola, bom dia,
ResponderExcluirGostaria 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,
ExcluirInfelizmente não. Usei apenas com Arduino.
Abraço!
Olá, bom dia,
ResponderExcluirfaz 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! :)
ExcluirBoa tarde, primeiramente parabéns pelo excelente trabalho, e segundo, como faço para resetar os valores de min, seg e hr?
ResponderExcluirBoa noite,
ExcluirAtualize 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!
ResponderExcluirAmigo 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.
ResponderExcluirOi Marx,
ExcluirExato, 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
ResponderExcluirOlá, boa noite. como faço para fazer a leitura do sensor dht11 com o módulo Ic2?
ResponderExcluirOi Fagner,
ExcluirEsse módulo é específico para uso com display LCD 16x2 ou 20x4.
Abraço!
Obrigado pela atenção!
ExcluirMas não entendi muito sua fala (sou meio leigo!). O meu lcd é 16x2 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 128x64? 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,
ExcluirSem 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 128x64, 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 128x64.
Abraço!
Ola. Parabéns pelo trabalho.
ResponderExcluirEu 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,
ExcluirVi 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. .
ResponderExcluirBoa noite João,
ExcluirAinda não tenho, mas está na lista de futuros posts. Que lcd vc está usando ?
Abraço!
To usando o display 16 x 2
ExcluirBoa amigo,
ExcluirEstou atras de um programa para arduino uno, com programação de relógio em um display 16x2, 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
ResponderExcluirOi João,
ExcluirColoque 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!!!
ExcluirAbs
Edu
Parabéns pelo blog!
ResponderExcluirUma 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,
ExcluirAcho que não entendi o problema.. Quais interrupções ?
Abraço!
Primeiramente parabéns pelo site!
ResponderExcluirComprei 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!
ResponderExcluirLCD 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.
ResponderExcluirAgradeço desde já.
estou com mesmo problema. Conseguiu resolver?
ExcluirEste 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);
ExcluirEu estou tentando usar um LCD 16x2 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
ResponderExcluirBoa noite,
ExcluirPor 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
ResponderExcluirArduino: 1.6.11 (Windows 10), Placa:"Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"
C:\Users\Valdemir Dias\Documents\Arduino\sketch_Relogio_com_display_mega\sketch_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:\Users\Valdemir Dias\Documents\Arduino\sketch_Relogio_com_display_mega\sketch_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:\Users\Valdemir Dias\Documents\Arduino\sketch_Relogio_com_display_mega\sketch_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:\Users\Valdemir Dias\Documents\Arduino\libraries\LiquidCrystal_I2C
Não usado: C:\Users\Valdemir Dias\Documents\Arduino\libraries\NewliquidCrystal
Não usado: C:\Program Files (x86)\Arduino\libraries\LiquidCrystalI2C
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 ?
ResponderExcluirOla 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 ?
ResponderExcluirParabéns pelo projeto, ajudou muito !!!
ResponderExcluirEstou 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.
ResponderExcluirme ajuda no i2c_scanner apareceu
ResponderExcluirScanning...
I2C device found at address 0x3F !
done
Oi Marcelo,
ExcluirLegal, 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 :/
ResponderExcluirScanning...
I2C device found at address 0x3F !
done
Oi,
ResponderExcluirprimeiramente 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,
ExcluirEstranho 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...
ResponderExcluirO 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.
ExcluirQual programa você usa para fazer a simulação no computador?
ResponderExcluirEu utilizo o programa da AutoDesk mas falta muitos componentes, inclusive esse módulo I2C não tem lá.
Obrigado.
Oi Marcelo,
ExcluirPara 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:
ResponderExcluir#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á!
ResponderExcluirGostaria de saber qual software que foi utilizado para gerar as imagens da simulação dos circuitos?
Oi Marcelo,
ExcluirPara o desenho do circuito eu uso o Fritzing (fritzing.org).
Abraço!
Adilson
como faço para utilizar o esp8266_01 com o lcd 16x2 ,ao invés do node mcu
ResponderExcluirBoa tarde,
ExcluirInfelizmente no ESP-01 vc não vai ter portas suficientes para fazer isso.
Abraço!
Adilson
Bom dia!!!
ResponderExcluirUsei esse código no meu mega2560 com display i2c 20x4 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?
ResponderExcluirobrigado cara por compartilhar o que você tem de conhecimento ajudou muito vlw!
ResponderExcluirValeu...:) Abraço!
ExcluirAdilson