16 dezembro 2014

Como utilizar o módulo I2C com display LCD

Quem precisa conectar um display LCD 16x2 ou 20x4 ao Arduino sabe que vai precisar de pelo menos 6 fios para conexão. Em placas com um número menor de  portas, como o Arduino Uno, isso significa sacrificar algumas portas que poderiam ser utilizadas para ligação de outros componentes, como sensores ou motores.

Um módulo que pode ser utilizado para contornar esse problema é o módulo I2C para display LCD com CI PCF85574 (datasheet) :


Módulo I2C display LCD Arduino

Com esse módulo, você consegue controlar um display LCD, seja ele 16x2 ou 20x4,  utilizando apenas dois pinos do Arduino : o pino analógico 4 (SDA) e o pino analógico 5  (SCL), que formam a interface de comunicação I2C.



Estrutura do módulo I2C

Na lateral esquerda do módulo temos 4 pinos, sendo que dois são para alimentação (Vcc e GND), e  os outros dois são da interface I2C (SDA e SCL). O potenciômetro da placa serve para ajuste do contraste do display, e o jumper na lateral oposta permite que a luz de fundo (backlight) seja controlada pelo programa ou permaneça apagada.

Módulo I2C - Detalhes

Por padrão o módulo vem configurado com o endereço 0x27, mas você pode alterar esse endereço utilizando os pinos A0, A1 e A2 seguindo a tabela abaixo :

Tabela endereços módulo i2c

Em alguns casos o módulo I2C pode vir configurado com uma faixa de endereços diferente, para descobrir qual o endereço do módulo, utilize o programa I2C Scanner, que eu mostro nesse post.

Ligação do módulo I2C ao display LCD

O módulo possui 16 pinos que podem ser ligados diretamente ao display, ou você pode  testar a conexão na protoboard, como eu fiz montando o circuito abaixo, onde utilizei um display LCD 16x2 com controlador HD44780 ligado ao Arduino Uno :

Circuito Arduino Uno LCD 16x2 I2C
Caso você esteja usando um Arduino Mega 2560, utilize os pinos 20 (SDA) e 21 (SCL) :

Circuito Arduino Mega LCD 16x2 I2C

Programa e biblioteca LiquidCrystal_I2C

Para controlar esse módulo I2C, utilize a biblioteca LiquidCrystal_I2C, disponível nesse link. Descompacte o arquivo ZIP e  renomeie a pasta LiquidCrystal para LiquidCrystalI2C, copiando-a para a pasta  LIBRARIES da IDE do seu Arduino. Renomear a pasta evita que você tenha conflitos com a biblioteca LiquidCrystal que já vem embutida na IDE.

Os comandos para controle do display são praticamente os mesmos da biblioteca  LiquidCrystal que utilizamos normalmente, com comandos como lcd.begin(), lcd.print()  e lcd.setCursor(). Na biblioteca I2C, o comando lcd.setBacklight() liga (HIGH) ou desliga (LOW) a luz de fundo do display.


 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
// Programa : Display LCD 16x2 e modulo I2C
// Autor : Arduino e Cia

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Inicializa o display no endereco 0x27
LiquidCrystal_I2C lcd(0x27,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("Arduino e Cia !!");
  lcd.setCursor(0,1);
  lcd.print("LCD e modulo I2C");
  delay(1000);
  lcd.setBacklight(LOW);
  delay(1000);
}


Para utilizar esse módulo com um display LCD 20x4, altere a linha lcd.begin(16,2) para lcd.begin(20,4), seguindo o mesmo esquema de conexão mostrado acima.


No artigo LCD 16x2 com módulo I2C e RTC DS1307 eu mostro como utilizar esse módulo juntamente com o módulo RTC DS1307 para mostrar as informações de data e hora no display.


186 comentários:

  1. Olá tenho um LCD e fiz como no tutorial, mas ele fica só azul e sem aparecer nada de letras. O que ṕode ser?

    ResponderExcluir
    Respostas
    1. Oi Swellington,

      Isso parece ser algum problema no ajuste do contraste (pino 3 do LCD, se você estiver utilizando o mesmo tipo de display LCD 16x2), nesse caso, pode ser algum problema de conexão entre o módulo I2C e o display. Ou então você precisa apenas ajustar o potenciômetro do módulo.

      Abraço !

      Excluir
    2. o meu deu o mesmo problema

      Excluir
    3. Que tipo de display você está usando ? o controlador é o mesmo (HD44780) ?

      Excluir
    4. O problema eh na comunicacao I2C
      De uma olhada nesse link:
      http://forum.arduino.cc/index.php?topic=128635.0

      No meu caso tive q usar
      #define I2C_ADDR 0x3F
      ao inves do valor dado no codigo

      Excluir
    5. esta ligação tem que ser feita com resistores de pull-up nas vias sda e scl, nao?

      Excluir
    6. O meu LCD 16x2 de fundo verde funcionou corretamente utilizando o endereço 0x3F.

      Excluir
    7. Olá, no meu tambem deu o mesmo problema, mas troquei a biblioteca e deu tudo certo...

      Excluir
    8. 0x3F funciona perfeitamento com o Arduino NANO.
      #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("Arduino e Cia !!");
      lcd.setCursor(0,1);
      lcd.print("LCD e modulo I2C");
      delay(1000);
      lcd.setBacklight(LOW);
      delay(1000);
      }

      Excluir
  2. Amigo,

    A Biblioteca não está mais disponível para baixar. Tem como me enviá-la?
    jobsongf@gmail.com
    Att.

    ResponderExcluir
    Respostas
    1. Boa noite,

      Já consertei o link, pode baixar a biblioteca normalmente. Provavelmente o erro de POSITIVE que você citou está acontecendo por não ser a biblioteca correta.

      Abraço !

      Excluir
  3. Prezado,

    o Seu sketch está dando erro no POSITIVE. informa que não foi declarado.
    Pode me ajudar?
    jobsongf@gmail.com

    Att.

    ResponderExcluir
    Respostas
    1. Boa noite,

      Qual versão de IDE você está utilizando ? Aqui eu testei com a 1.0.6

      Abraço !

      Excluir
    2. Olá, tentei com a versão que vc citou, 1.0.6, e mesmo assim dá o problema do POSITIVE.
      O que fazer?

      Excluir
    3. Boa tarde,

      Baixe a biblioteca à partir desse link, que irá funcionar normalmente :

      https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads/LiquidCrystal_V1.2.1.zip

      Abraço !

      Excluir
    4. Fiquei extremamente grato pela rapidez na resposta! Poucos sites o pessoal é rapido assim, parabéns!
      Porém ainda não funciona, embora não seja mais o erro do positive. Segue o erro:


      This report would have more information with
      "Show verbose output during compilation"
      enabled in File > Preferences.
      Arduino: 1.0.6 (Windows 7), Board: "Arduino Uno"
      LiquidCrystal_I2C\LiquidCrystal_I2C.cpp.o: In function `LiquidCrystal_I2C::pulseEnable(unsigned char)':
      C:\Users\Usuário\Documents\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.cpp:247: multiple definition of `LiquidCrystal_I2C::pulseEnable(unsigned char)'
      LiquidCrystal\LiquidCrystal_I2C.cpp.o:C:\Users\Usuário\Documents\Arduino\libraries\LiquidCrystal/LiquidCrystal_I2C.cpp:287: first defined here
      LiquidCrystal_I2C\LiquidCrystal_I2C.cpp.o: In function `LiquidCrystal_I2C::send(unsigned char, unsigned char)':
      C:\Users\Usuário\Documents\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.cpp:229: multiple definition of `LiquidCrystal_I2C::send(unsigned char, unsigned char)'
      LiquidCrystal\LiquidCrystal_I2C.cpp.o:C:\Users\Usuário\Documents\Arduino\libraries\LiquidCrystal/LiquidCrystal_I2C.cpp:240: first defined here
      LiquidCrystal_I2C\LiquidCrystal_I2C.cpp.o: In function `LiquidCrystal_I2C::setBacklight(unsigned char)':
      C:\Users\Usuário\Documents\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.cpp:278: multiple definition of `LiquidCrystal_I2C::setBacklight(unsigned char)'
      LiquidCrystal\LiquidCrystal_I2C.cpp.o:C:\Users\Usuário\Documents\Arduino\libraries\LiquidCrystal/LiquidCrystal_I2C.cpp:167: first defined here
      LiquidCrystal_I2C\LiquidCrystal_I2C.cpp.o: In function `LiquidCrystal_I2C::begin(unsigned char, unsigned char, unsigned char)':
      C:\Users\Usuário\Documents\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.cpp:47: multiple definition of `LiquidCrystal_I2C::begin(unsigned char, unsigned char, unsigned char)'
      LiquidCrystal\LiquidCrystal_I2C.cpp.o:C:\Users\Usuário\Documents\Arduino\libraries\LiquidCrystal/LiquidCrystal_I2C.cpp:144: first defined here
      LiquidCrystal_I2C\LiquidCrystal_I2C.cpp.o: In function `LiquidCrystal_I2C::init()':
      C:\Users\Usuário\Documents\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.cpp:36: multiple definition of `LiquidCrystal_I2C::init()'
      LiquidCrystal\LiquidCrystal_I2C.cpp.o:C:\Users\Usuário\Documents\Arduino\libraries\LiquidCrystal/LiquidCrystal_I2C.cpp:194: first defined here
      C:\Program Files (x86)\Arduino\hardware\tools\avr\bin\avr-ar: unable to rename 'core.a'; reason: File exists
      LiquidCrystal_I2C\LiquidCrystal_I2C.cpp.o: In function `LiquidCrystal_I2C::pulseEnable(unsigned char)':
      C:\Users\Usuário\Documents\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.cpp:247: multiple definition of `LiquidCrystal_I2C::pulseEnable(unsigned char)'
      LiquidCrystal\LiquidCrystal_I2C.cpp.o:C:\Users\Usuário\Documents\Arduino\libraries\LiquidCrystal/LiquidCrystal_I2C.cpp:287: first defined here
      LiquidCrystal_I2C\LiquidCrystal_I2C.cpp.o: In function `LiquidCrystal_I2C::send(unsigned char, unsigned char)':
      C:\Users\Usuário\Documents\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.cpp:229: multiple definition of `LiquidCrystal_I2C::send(unsigned char, unsigned char)'
      LiquidCrystal\LiquidCrystal_I2C.cpp.o:C:\Users\Usuário\Documents\Arduino\libraries\LiquidCrystal/LiquidCrystal_I2C.cpp:240: first defined here
      LiquidCrystal_I2C\LiquidCrystal_I2C.cpp.o: In function `LiquidCrystal_I2C::setBacklight(unsigned char)':
      C:\Users\Usuário\Documents\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.cpp:278: multiple definition of `LiquidCrystal_I2C::setBacklight(unsigned char)'

      Excluir
    5. Boa tarde !

      Não sei dizer o que é exatamente, mas me parece que há algum conflito entre a biblioteca "nova" e a "antiga". Você apagou a biblioteca anterior ?

      Abraço !

      Excluir
    6. Boa tarde ,
      Eu gostaria de pedir uma ajuda, segui os passos que voces comentaram no blog e nao consigo rodar o LCD com i2C ... sempre tenho o erro do POSITIVE , reinstalei o sw arduido varias vezes , apaguei biblioteca etc etc etc ... : ( Alguem tem aquela dica magica pra ajudar ?
      .
      Abraco Roberto Ctba

      Excluir
  4. Fiz o teste com o meu arduino mega e não deu nada, mas com o uno funcionou perfeitamente, sabe me dizer o pq?

    ResponderExcluir
    Respostas
    1. Boa noite Saulo,

      No Arduino Mega, você deve usar os pinos 20 (SDA) e 21 (SCL), ao invés dos pinos 4 e 5 do Arduino Uno. Acabei de testar aqui e funcionou normalmente.

      Abraço !

      Excluir
    2. Arduino e Cia, obrigado, fiz o teste agora e funcionou perfeitamente!

      Excluir
    3. Obrigado Saulo !

      Achei a sua pergunta muito útil e incluí essa informação sobre o Arduino Mega no post. :-)

      Abraço !

      Excluir
  5. Olá!utilizo a versão 1.0.6 em um Windows8, baixei a versão da biblioteca que você citou acima,e segui os passos descritos,copiei o seu sketch.Porém não consigo compilar pois aparece o erro :'LiquidCrystal_I2C' does not name a type. Percebi também que quando importo a biblioteca do LiquidCrystall2C ela não aparece.Quando tento utilizar os exemplos,aparece o mesmo erro.Excluí a biblioteca que já vem inclusa no arduino para testar se não estavam entrando em conflito porém o erro continua. Sabes me dizer como resolvo isso??

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Eu também utilizei a versão 1.0.6 da IDE, mas com o Windows 7. Acho estranho ela não estar aparecendo quando você importa. Consegue testar com a versão 1.0.5 ?

      Abraço.

      Excluir
  6. Boas eu adiciono a biblioteca e faço as ligações mas da-me um erro com o "POSITIVE"

    Alguém me pode ajudar?

    ResponderExcluir
  7. Cara vlw mesmo, funcionou blza o meu lcd com esse seu tutorial. So nao consegui colocar Caracteres. quando eu tento onde eu peço pra escrever fica um quadrinho branco no lcd.

    Tem haver com a biblioteca será?

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Você fala de caracteres customizados (carinhas, símbolos, etc) ? Se for isso, eu ainda não testei, mas provavelmente é algum ajuste na biblioteca.

      Abraço !

      Excluir
  8. Olá,

    Há um engano na sua tabela de endereços.
    O endereço 0x26 é 0-1-1 e não 1-1-1.
    De qualquer forma, parabens pela dica, me ajudou bastante.
    Abração.
    Renato

    ResponderExcluir
    Respostas
    1. Boa tarde Renato,

      Muito obrigado, já corrigi a tabela. :-)

      Abraço !

      Excluir
  9. Olá, gostaria de saber quantos LCD's posso conectar em um Arduino Mega através do módulo I2C?
    A princípio meu projeto necessita de 10 LCD's com possível expansão para 20 LCD's.
    Seria possível através de um Arduino controlar os 10 LCD's através de endereçamento?
    Vi aqui na página que o módulo I2C tem 8 possíveis endereços, mas não entendi se posso usar mais que 8, como exemplo, do 0x30 ao 0x40.

    Agradeço pela ajuda.

    ResponderExcluir
    Respostas
    1. Boa tarde Giuliano,

      Não sei se seria possível com esse módulo I2C, já que o próprio datasheet do controlador, o PCF85574, informa que são 8 endereços programáveis.

      Abraço !

      Excluir
  10. Senhores boa noite, uma pequena dica que espero sirva para solucionar problemas.
    Comigo aconteceu os mesmos problemas o display acendia mas nada da mensagem, recarreguei várias vezes a biblioteca e nada, solucionei da seguinte forma.
    Rodei o Sketch "IC2 Scanner" que pode ser encontrado aqui (http://playground.arduino.cc/Main/I2cScanner), com isso consegui o endereçamento da minha placa I2C que no caso foi 0x3F, substitui na linha 8 no lugar do 0x27 e funcionou.

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Boa dica, pois você pode encontrar por aí placas sem o endereço "padrão" que eu listei acima.

      Abraço !

      Excluir
    2. Boa tarde,

      Estou com o mesmo problema, o LCD acende mas nada aparece... Às vezes aparece alguns traços ou quadrados na tela, à medida que mexo no contraste... Utilizei o I2C Scanner e verifiquei que o endereço correto é "0x3F"... Mesmo assim não teve efeito algum. Já utilizei vários endereços diferentes e várias bibliotecas diferentes e mesmo assim nada. O meu programa é uma tranca eletrônica e roda perfeitamente, mas sem aparecer absolutamente nada na tela do LCD. Meu arduino é o mega 2560, já tentei utilizar tanto as entradas A4 e A5 quanto as 20 e 21, para SDA e SCL e mesmo assim não tive resultado nenhum. Gostaria de saber o que pode ser e se eu preciso necessariamente soldar A0, A1 e A2 para que funcione, pois isso ainda não fiz.

      Agradeço desde já.

      Excluir
    3. Boa noite,

      Teoricamente você não precisa mudar nada nos pinos A0, A1 e A2. No meu eu usei direto, sem alterações.

      Você tem outro para testar ? Estou suspeitando que o módulo está com defeito.

      Abraço!

      Excluir
    4. Jose Espindola, você é um gênio parceiro, eu ja tinha desistido, mais segui sua dica, uma luz no final do túnel e funcionou, estou feliz de mais parceiro deu tudo certo aqui. show um grande abraço pra você e esse site show mesmo vlw

      Excluir
  11. Olá, achei bem bacana o modelo desenhado para explicar essa montagem, parabéns.
    Gostaria de saber onde posso encontrar o arquivo .fzpz do módulo I2C para o Fritzing.
    Obrigado.

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Obrigado. Infelizmente eu não tenho, também procurei o componente e como não encontrei, desenhei para fazer o post. :-)

      Abraço !

      Excluir
    2. Olá eu tenho ele.
      É só copiar e baixar no link:
      http://www.ewap.ch/fritzing/LCM1602_IIC.fzpz

      Eu encontrei nesse site gringo aki:
      http://www.ewap.ch/?p=208

      Excluir
  12. Olá,

    Gostaria de saber como crio caracteres personalizados nesta biblioteca.
    Eu testei o exemplo do smiley do Arduino (http://www.arduino.cc/en/Reference/LiquidCrystalCreateChar) mas apareceram apenas caracteres randômicos.

    ResponderExcluir
    Respostas
    1. Boa tarde Mateus,

      Comigo funcionou, tente este codigo (coloque o include para as bibliotecas wire e liquidcrystal_i2c no inicio do programa):

      #include
      #include

      // Inicializa o display no endereco 0x27
      LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE);

      byte smiley[8] = {
      B00000,
      B10001,
      B00000,
      B00000,
      B10001,
      B01110,
      B00000,
      };

      void setup() {
      lcd.begin(16, 2);
      lcd.createChar(0, smiley);
      lcd.setCursor(1,1);
      lcd.write(byte(0));
      }

      void loop() {}

      Abraço !

      Excluir
  13. Boa tarde,

    tentei compilar o código e deu esse erro:


    teste.ino:2:31: fatal error: LiquidCrystal_I2C.h: No such file or directory
    compilation terminated.
    Erro compilando.

    o que pode ser?

    Muito obrigado.

    ResponderExcluir
    Respostas
    1. Boa noite Myshel,

      Me parece algum erro na instalação da biblioteca.

      Abraço !

      Excluir
    2. Myshel.... descobri seu problema que era o mesmo do meu!!...

      quando vc descompactar a pasta, vc vai perceber que irão ter duas outras dentro "_MACOSX" e "LiquidCrystal".

      Esqueça a primeira pasta e renomeie APENAS a pasta "LiquidCrystal" para "LiquidCrystalI2C".

      Depois é só jogar para a Libraries de seu Arduino APENAS a pasta que vc renomeou!

      Detalhe fdp!

      Arduino é Cia.... parabéns pelo post!... resolveu minha vida! vou até por uma dedicatória pra vc no meu projeto!...rs


      abraço a todos!

      Excluir
    3. Valeu Marcel !!! rs :-)

      Abraço.

      Excluir
  14. Como fazer com dois ldc's e 2 sensores dht22, dois controles.

    Grato

    ResponderExcluir
  15. Boa tarde amigo, as vezes quando dou um Reset o display buga aparecendo tudo embaralhado, e é só eu desligar e ligar que volta ao normal, o que seria esse bug? Seria necessário resistores pullup na saída do Atmega?

    ResponderExcluir
    Respostas
    1. Boa noite,

      Não sei te dizer, vou tentar arrumar outro módulo para ver se isso acontece.

      Abraço.

      Excluir
    2. Bom dia! Como sempre parabéns pelo post, excelente, sempre me ajudando no meu aprendizado.
      Estou com um "projetinho" para usar dois LCD´s I2CS com modulo (PCF85574 ).
      Somente fiquei na dúvida de como fazer a mudança de endereço no modulo (PCF85574 ), olhando a seleçao de endereço, o quê devo fazer? "curto-circuitar com solda?" os pontos AO;A1;A2; Pra cima? Para o lado? Você poderia mostra uma "tabelinha?".
      Desde já muito obrigado

      Roberto Carlos

      Excluir
    3. Bom dia Roberto,

      Exatamente. Curto-circuitar com solda. Se você olhar a imagem dos detalhes da pinagem, vai ver dois pontos acima do A0, A1 e A2, basta juntar esses pontos. vou tentar fazer um esqueminha pra mostrar, mas se tiver dificuldade, é só entrar em contato.

      Abraço e obrigado !

      Excluir
  16. Boa noite,
    Fiz exatamente como mostra no tutorial, porém persiste o erro:
    'POSITIVE' was not declared in this scope

    ResponderExcluir
  17. Boa noite,

    Ao transferir o código a tela fica somente azul, já rodei o scanner e o endereço está certo, no meu caso 0x27. Poderia me ajudar

    ResponderExcluir
    Respostas
    1. Boa tarde Victor,

      Você tentou configurar o contraste usando o potenciômetro do módulo ?

      Abraço!

      Excluir
  18. Boa tarde. Obrigado pela resposta tão eficiênte. Fiz conforme você orientou e deu tudo certo. Fiz a solda do A2 para o ponto de cima e o modulo ficou com o endereço 0x23.
    Como faço para enviar as fotos?
    Mais uma dúvida...vc conhece este modulo?(Universal Serial:UART/IIC/I2C/SPI Adapter for 128x64 LCD DS12864LCD-UNA).
    Para mudar de UART para I2C é só fechar os pontos (3 pontos) com solda?
    veja no link:
    http://www.digole.com/index.php?productID=535

    muito obrigado...

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Utilize o formulário de contato no lado direito da página, eu te respondo com o meu email e aí você pode enviar fotos.

      Não conheço esse módulo, mas pela descrição, você tem que unir apenas os 2 pinos da direita (o I2C com o pino do meio).

      Aliás, obrigado pela informação, estava procurando um módulo que funcionasse com display gráfico 128x64. :-)

      Vc tem esse módulo ? Comprou aonde ?

      Abraço!

      Excluir
  19. Olá esta dando esse erro aqui, poderia me ajudar

    ChangeUID:8: error: 'POSITIVE' was not declared in this scope

    ResponderExcluir
    Respostas
    1. Boa noite Bruno,

      Tente baixar a biblioteca deste link: https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads/LiquidCrystal_V1.2.1.zip

      Abraço!

      Excluir
    2. Baixei no link que vc postou para mim, o erro continua o mesmo.

      sketch_aug20a:8: error: 'POSITIVE' was not declared in this scope

      Excluir
  20. NO MEU DISPLAY A TELA FICA AZUL E A PRIMEIRA FILEIRA DE CIMA FICA COMPLETAMENTE ACESA , EU ENVIEI O SKETCH NAO ACONTECEU NADA . O QUE EU FAÇO :?

    ResponderExcluir
  21. Não tenho certeza se é o real motivo... faltam os resistores de pullups na ligação.
    Tive problemas também, quando o lcd não era necessariamente iniciado com o microcontrolador.

    O barramento I2C fica ocioso em nível logico alto com resistor de pull-up nas vias SDA e SCL.
    Assim quando o LCD não comunicar e ficar só na tela azul borrada, é só resetar o micro. Sem os resistores tinha que resetar muitas vezes até que por acaso a comunicação sincronizava, na sorte.
    vejam o esquema.

    http://www.robot-electronics.co.uk/images/i2ca.GIF

    ResponderExcluir
    Respostas
    1. Dependendo do circuito, pode ser esse o problema sim. Aqui funcionou normalmente durante os testes, só não sei se esse módulo já tem os resistores pull up embutidos.

      Abraço!

      Excluir
    2. O meu ficou assim, com a tela azul e a primeira fileira acesa, porque o endereço estava incorreto, utilizei o i2c scaner e alterei o código e funcionou.

      Excluir
  22. Olá,
    Não entendi como usar a tabela para alteração de endereço. Preciso usar pinos analógicos diferentes dos A4 e A5. Se eu for usar os pinos A0 e A1, qual endereço seria e porque? O endereço 0x27, que corresponde aos pinos A4 e A5, na tabela se refere ao A0 A1 e A2. Porque?
    Obrigado

    ResponderExcluir
    Respostas
    1. Bom dia Anderson,

      A comunicação do módulo é via I2C, então você terá que utilizar os pinos A4 e A5 do Arduino mesmo.

      As marcações A0, A1 e A2 se referem apenas à configuração do endereço do módulo (0x20, 0x21, 0x22 etc), e não tem nada a ver com a configuração das portas.

      Resumindo: No Arduino Uno, o módulo será sempre ligado às portas A4 e A5, mas você pode ligar mais de um módulo no mesmo barramento, com endereços diferente, para isso serve o A0, A1 e A2 .Você pode ter o primeiro módulo configurado como 0x20, e o segundo com o 0x25, por exemplo.

      Abraço!

      Excluir
  23. Prezados,
    Continuo a receber o sms:
    sketch_sep21a.ino:10:45: error: 'POSITIVE' was not declared in this scope

    Já baixei a biblioteca de referencia no link disponível no vosso site nem com isso o problema se resolve.

    Agradeço o vosso suporte e ajuda.

    Mayele

    franciscomayele@hotmail.com

    ResponderExcluir
  24. Prezados,
    continuo sem conseguir de aparecer as letras no meu LCD 20x4 com o Modulo I2C, ele só fica com uns quadradinhos branco e não aparece a escrita, já mudei o contraste mais não aparece nada só diminui a intensidade da cor do quadradinho. Já fiz todos os teste dos comentários e do tutorial e não consigo nada e quando vou fazer o Rodei o Sketch "I2C Scanner" e da este erro device found e não saber se é 0x27, 0x20 ou 0x3F. Alguém tem alguma solução??

    ResponderExcluir
    Respostas
    1. Bom dia Leonardo,

      Já tentou colocar resistores pull-up nos pinos SDA e SCL ? Eu não precisei colocar, mas talvez o seu LCD precise disso.

      Abraço!

      Excluir
    2. Vou tentar!!

      Excluir
    3. Arduino e Cia, tem algum e-mail a onde eu posso mandar um vídeo do que está acontecendo. E como coloco esses resistores nos pinos SDA e SCL, pois estou utilizando o Modulo Serial I2C

      Excluir
    4. Eu comprei na Filipeflop e estou utilizando este LCD e Modulo
      -- LCD 20x4
      http://www.filipeflop.com/pd-6b7e6-display-lcd-20x4.html?ct=41d86&p=1&s=1

      --Modulo Serial I2C
      http://www.filipeflop.com/pd-179dbc-modulo-serial-i2c-para-display-lcd-arduino.html?ct=41d96&p=1&s=1

      Excluir
    5. Boa tarde Leonardo,

      Por favor entre em contato utilizando o formulário de contato no lado direito da página, e conversamos por email, assim você pode me mandar o vídeo.

      Abraço!

      Excluir
  25. Ola, é possivel o mesmo lcd, ( usando A4 e A5 ) no uno funcionar ok e no mega não ?
    Preciso alterar algo para que funcione no mega tambem ?
    Grato

    ResponderExcluir
  26. desculpe o incomodo, acabei de postar uma pergunta mas ja resolvi .
    Muito obrigado pelo post

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Legal que conseguiu resolver. Qualquer coisa, estou à disposição. :)

      Abraço!

      Excluir
  27. Boa Noite, seria possível usando um lcd com o modulo i2c, colocar uma certa informação na tela, e depois colocar um Push Button, para aparecer outra informação na tela? Por exemplo, no lcd esta mostrando Temperatura: 35 °C, dai eu apertaria o Push Button, e na tela apareceria outra informação, tipo Umidade: 50%.

    ResponderExcluir
  28. Boa noite.
    Seria possível usar junto com o LCD e o módulo I2C, um Push Button, para mostrar diferentes informações, em diferentes telas?
    Por exemplo, na tela do LCD apareceria Temperatura: 35°C, dai eu apertaria o botão, e a tela mostraria Umidade: 40%, mas sem mostrar a temperatura, mostrando só a umidade.
    Desde já agradeço.

    ResponderExcluir
    Respostas
    1. Bom dia Guilherme,

      Eu não tenho nenhum código pronto com isso, mas é uma boa sugestão. Seria legal também você colocar números grandes no display, como eu faço neste post:

      http://www.arduinoecia.com.br/2013/04/lcd-16x2-rtc-numeros-grandes.html

      Abraço!

      Excluir
  29. Boa tarde!

    Não estou tento sucesso com o seu código, meu lcd apenas fica acendendo e desligando. As ligações estão corretas, o endereço é 0x27 e não consigo encontrar o erro.

    Desde já agradeço.

    ResponderExcluir
    Respostas
    1. Boa noite Vinicius,

      Estranho. Pelo que você está descrevendo, uma parte do programa funciona, pq uma das funções é ligar e desligar o backlight.

      Você já conferiu com o I2CScanner se o endereço é mesmo o 0x27 ?

      Abraço!

      Excluir
  30. Boa tarde Arduino e Cia, usei o código que foi passado e não obtive sucesso na primeira vez, foi quando fiz o I2CSanner e descobri que o endereço era o 0x3F e nao o 0x27, e isso mesmo? coloquei o endereço e esta funcionando porem o brilho do fundo esta muito forte e quase nao aparece os caracteres, sim eu já mexi no potenciômetro e não tem como austar mais, tem alguma dica ou algo que possa fazer?
    muito obrigado pela atenção
    Abraço

    ResponderExcluir
    Respostas
    1. Boa tarde Jonathan,

      Sim, em alguns módulos tem vindo endereços diferentes, mas com o I2C Scanner fica fácil de descobrir isso.

      Quanto ao contraste, tente adicionar esse comando antes do lcd.setBacklight():

      lcd.setBacklightPin(Pino_Backlight,POSITIVE);

      Abraço!

      Excluir
  31. Ola. Gostaria de saber como o módulo consegue ligar e desligar o backlight se jumper não foi utilizado?

    ResponderExcluir
    Respostas
    1. Boa tarde Iraí,

      Ele usa um dos pinos do controlador para fazer isso.

      Abraço!

      Excluir
  32. boa tarde
    o meu codigo da erro no positive porque??

    ResponderExcluir
    Respostas
    1. Boa tarde Zé!

      Você utilizou a biblioteca que está no post ?

      Abraço!

      Excluir
  33. Bom dia!
    No meu caso inicialmente só ficava azul o visor, dai passei o I2C Scanner, e o resultado foi 0x3F.
    Alterei o Código, e a partir deste momento o LCD começou a piscar conforme o código faz. Porem não aparece as letras, sabe o motivo?

    Estou Utilizando uma Arduino Nano (utilizando os pinos A4 e A5).

    Segue parâmetros

    #define I2C_ADDR 0x3F
    #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
    #define BACKLIGHT_PIN 3

    LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin,BACKLIGHT_PIN,POSITIVE);

    ResponderExcluir
    Respostas
    1. Boa noite Bruno,

      Você não é o primeiro a relatar esse problema.. estranho. Pode me dizer onde comprou esse módulo e se você já tentou ajustar o contraste usando o potenciômetro da placa ?

      Abraço!

      Excluir
  34. Boa noite!
    Meu caso quando envio o código para LCD, Ex:

    #include
    #include

    LiquidCrystal_I2C lcd(0x27,20,4);

    void setup()
    {
    lcd.init();

    lcd.backlight();
    lcd.print("Hello, world!");
    }

    void loop()
    {
    }

    Aparece apenas no Display LCD a letra (H), e não Hello, world.
    Gostaria de ajuda para solucionar o problema.
    Att!

    ResponderExcluir
    Respostas
    1. Bom dia,

      Você tentou usar o código exatamente como está no post ? Deu certo ?

      Abraço!

      Excluir
    2. Sempre que envio uma mensagem para o LCD, aparece apenas a primeira letra da mensagem e nunca a mensagem completa. Já troquei a biblioteca do liquidCrystal_I2C por outras versões, mas o problema persiste. Estou acreditando que o Display LCD esta com defeito.

      Excluir
    3. Estou com o mesmo problema, só aparece a primeira letra, mas rodei o exemplo da biblioteca, e as palavras que digitei via serial aparecem inteiras.

      Excluir
  35. Olá, gostaria de saber se é possível colocar esse display em vez do display LDC do tipo JHD 162A no projeto abaixo e se sim, como? Grato!

    #include "LiquidCrystal.h"
    #include "Limits.h"
    const int sensorLuz = 0; //Pino analógico que o sensor de luz está conectado.
    const int sensorTemp = 1; //Pino analógico que o sensor de temperatura está conectado.

    //Variáveis
    int valorSensorLuz = 0; //usada para ler o valor do sensor de luz.
    int valorSensorTemp = 0; //usada para ler o valor do sensor de temperatura.
    int menorValorTemp = INT_MAX; //usada para armazenar o menor valor da temperatura.

    //Criando um objeto da classe LiquidCrystal e
    //inicializando com os pinos da interface.
    LiquidCrystal lcd(9, 8, 5, 4, 3, 2);

    void setup() {
    //Inicializando o LCD e informando o tamanho de 16 colunas e 2 linhas
    //que é o tamanho do LCD JHD 162A usado neste projeto.
    lcd.begin(16, 2);
    }

    void loop() {
    //Lendo o valor do sensor de luz
    valorSensorLuz = analogRead(sensorLuz);

    //Para evitar as grandes variações de leitura do componente
    //LM35 são feitas 8 leitura é o menor valor lido prevalece.
    menorValorTemp = INT_MAX; //Inicializando com o maior valor int possível
    for (int i = 1; i <= 8; i++) {
    //Lendo o valor do sensor de temperatura.
    valorSensorTemp = analogRead(sensorTemp);

    //Transformando valor lido no sensor de temperatura em graus celsius aproximados.
    valorSensorTemp *= 0.54 ;

    //Mantendo sempre a menor temperatura lida
    if (valorSensorTemp < menorValorTemp) {
    menorValorTemp = valorSensorTemp;
    }

    delay(150);
    }

    //Exibindo valor da leitura do sensor de temperatura no display LCD.
    lcd.clear(); //limpa o display do LCD.
    lcd.print("Temp: "); //imprime a string no display do LCD.
    lcd.print(menorValorTemp);
    lcd.write(B11011111); //Simbolo de graus celsius
    lcd.print("C");

    //Exibindo valor da leitura do sensor de luz no display LCD.
    lcd.setCursor(0,1); //posiciona o cursor na coluna 0 linha 1 do LCD.
    lcd.print("Luz: "); //imprime a string no display do LCD.
    lcd.print(valorSensorLuz);

    delay(2000); //aguarda 2 segundos
    }

    ResponderExcluir
  36. Ola!
    Para que serve lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE);
    esses numeros sao das portas digitais do arduino?

    ResponderExcluir
  37. Eu tbem estava com esse mesmo problema.
    exclui a biblioteca I2C que vc instalou, baixa a que tem na descricao do link fornecido pelo ARDUINO & CIA e extrai a pasta, troca o nome dela para liquidCrystal_I2C, e adiciona na biblioteca.zip do arduino, reinicia o app e copia a programacao e cola, copila e ja eraaaa..!!!!
    abraccsss

    ResponderExcluir
    Respostas
    1. Fiz exatamente como vc descreveu, e deu certo. Agora é só alegria.
      Valeu pela dica, muito obrigado.
      Abraço!

      Excluir
  38. Olá alguém pode me ajudar? estou tentando usar o modulo I2C (PCF8574T) acoplado ao display 20x4 e conectado ao Arduíno Uno. Porem não esta aparecendo nada no visor, já mudei a biblioteca e nada. tudo parece ser problema de comunicação.... mas não estou conseguindo solucionar, tem alguém ai pra me ajudar????

    Link para ver o que esta aparecendo no display.
    https://goo.gl/photos/uU9BgkBc7UPepit3A

    ResponderExcluir
  39. Olá alguém pode me ajudar? estou tentando usar o modulo I2C (PCF8574T) acoplado ao display 20x4 e conectado ao Arduíno Uno. Porem não esta aparecendo nada no visor, já mudei a biblioteca e nada. tudo parece ser problema de comunicação.... mas não estou conseguindo solucionar, tem alguém ai pra me ajudar????

    Link para ver imagem do display
    https://goo.gl/photos/uU9BgkBc7UPepit3A

    ResponderExcluir
    Respostas
    1. Oi Diogo,

      Você chegou a verificar o endereço do módulo com o I2CScanner ?

      Abraço!

      Excluir
  40. ola estou com o problema do erro do Positive vc sabe o que e?

    ResponderExcluir
  41. Olá,
    Muito bem explicado o tutorial, parabéns.
    Fiz o meu projeto em um Arduino Uno, funcionou perfeitamente, agora estou migrando para o arduino pro mini, e não existe as pinos analógicos 4 e 5, somente os pinos 6 e 7, mas não consegui fazer funcionar, na verdade não consegui entender foi informado as portas 4 e 5, tem alguma dica?
    Muito obrigado

    ResponderExcluir
  42. Olá,
    Muito bem explicado o tutorial, parabéns.
    Fiz o meu projeto em um Arduino Uno, funcionou perfeitamente, agora estou migrando para o arduino pro mini, e não existe os pinos analógicos 4 e 5, somente os pinos 6 e 7, e não consegui fazer funcionar, na verdade não consegui entender pq utilizamos as portas 4 e 5 no UNO, tem alguma dica?
    Muito obrigado

    ResponderExcluir
    Respostas
    1. Boa noite,

      Os pinos A4 e A5 são os pinos utilizados pela interface I2C do Arduino. O Pro Mini tem esses pinos (pelo menos o que eu tenho aqui tem os pinos A4 e A5).

      Dê uma olhadinha nesse diagrama, por favor: http://www.robotsteel.com/arduino_promini_pinnar.png

      Abraço!

      Excluir
    2. Boa noite,
      Eh verdade , fica no meu da placa.
      Valeu, muito obrigado!

      Excluir
  43. Cara...li todos os comentários aqui.

    O meu tava dando erro no Positive - Resolvido!
    Não localizava o modulo (0x3F) - Resolvido!
    O codigo não dá erro, compila certo - Resolvido.

    E ainda não funciona. Não aparece nada no LCD.

    Alguma dica?

    ResponderExcluir
    Respostas
    1. Boa noite,

      Dificil hein ? rs. o seu módulo é igual ao do post ?

      Abraço!

      Excluir
  44. Olá tudo bem?

    Estou com o mesmo problema do LCD não aparece as letras. Só que a programação é muito complexa. Este LCD está ligado num DUEMILANOVE alterado que o dono do projeto indicou de comprar via aliexpress.

    Ele diz no tutorial que A5-SCL e o SDA- A4 mas não está funcionando.

    Sei que as informações estão vagas mas realmente não sei mais o que fazer visto que o dono do projeto (que é da Russia) não me responde.

    O LCD tem o controlador já soldado nele.

    Poderia me ajudar?

    O curioso que eu rodei aquele sketch para ver qual o endereço do LCD e ele não achou.

    Obrigado!

    ResponderExcluir
    Respostas
    1. Oi Luciano,

      Realmente o primeiro passo seria o I2CScanner encontrar o módulo.... vc tem algum outro Arduino para testar ?

      Abraço!

      Excluir
  45. Olá!
    Então, hoje durante a tarde aconteceu o seguinte: Eu tenho 2 LCD que vem soldado o shield controlador. Os 2 eu testei no arduino UNO com a sua biblioteca :) e eles funcionaram! Ficaram piscando mas apareceu as letras. Agora, quando ligo eles no DUEMILANOVE da Keyes (funduino) ele volta a ficar só aceso o backlight mesmo estando na pinagem que ele pediu no tutorial. E descobri os endereços. O LCD + controlador da Keyes que comprei na Aliexpress (o que ele mandou comprar) é 0x27 e vi que está assim na programação. E o outro que comprei aqui é o 0x3F.

    Muito obrigado pela ajuda!!

    ResponderExcluir
  46. Olá!

    Funcionou! Na verdade o erro estava no tutorial dele. Ele falou uma coisa e na foto que exemplificava mostrava outra. Eu fucei aqui e finalmente achei a entrada certa.

    Obrigado!!

    ResponderExcluir
  47. Ola!

    Para um LCD 20x4 I2c a ligação é a mesma ?
    Obrigado!

    ResponderExcluir
    Respostas
    1. Boa tarde,

      É sim, não esqueça de mudar a linha 12 do programa para:

      lcd.begin (20,4);

      Abraço!

      Excluir
  48. Boa noite, quando tento compilar o código aparece esse erro:
    C:\Users\josem\Documents\Arduino\libraries\liquidCrystal_I2C\I2CIO.cpp:35:26: fatal error: ../Wire/Wire.h: No such file or directory

    #include <../Wire/Wire.h>

    ^

    compilation terminated.

    exit status 1
    Erro compilando.
    Oq poderia ser??
    Desde já grato pela ajuda.

    ResponderExcluir
    Respostas
    1. Boa noite,

      Coloque no programa o include para a biblioteca Wire.h

      Abraço!

      Excluir
    2. Aqui acontece o mesmo erro. #include já está incluso no código.

      Excluir
    3. Tenho o mesmo problema. Possuo o include no inicio da lógica e ja tentei incluir o Wire.h nas libraries do Arduino. Não funciona. Talvez seja um problema devido as atualizações do software.

      Excluir
    4. É só abrir o arquivo LiquidCrystal_I2C.cpp e mudar a linha
      #include <../Wire/Wire.h>
      para
      #include

      Excluir
  49. Bondia!
    Fiz esse procedimento e o erro continua.

    ResponderExcluir
  50. Olá, estou com problema na biblioteca wire. Poderiam me ajudar? Ela deve estar na pasta de arquivo do arduino?

    ResponderExcluir
    Respostas
    1. Oi Ariane,

      Tem que estar na pasta Libraries.

      Abraço!

      Excluir
  51. Bom dia, o meu não ta compilando fica mostrando essa mensagem


    C:\Users\jadir\Documents\Arduino\libraries\LiquidCrystal_I2C\._FastIO.cpp:1:9: error: 'Mac' does not name a type

    C:\Users\jadir\Documents\Arduino\libraries\LiquidCrystal_I2C\._FastIO.cpp:1:163: error: expected unqualified-id before numeric constant

    Usando a biblioteca Wire na versão 1.0 na pasta: C:\Programas\arduino-nightly-windows\arduino-nightly\hardware\arduino\avr\libraries\Wire
    Usando biblioteca LiquidCrystal_I2C na pasta: C:\Users\jadir\Documents\Arduino\libraries\LiquidCrystal_I2C (legacy)
    exit status 1
    Error compiling for board Arduino/Genuino Uno.

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Aparentemente é algum erro na instalação da biblioteca. Já verificou se não está em conflito com alguma outra ?

      Abraço!

      Excluir
    2. ta dando isso agora mais eu coloco o dois includes no começo
      C:\Programas\arduino-nightly\libraries\LiquidCrystal_I2C\I2CIO.cpp:35:26: fatal error: ../Wire/Wire.h: No such file or directory

      #include <../Wire/Wire.h>

      Excluir
  52. Eu boto a biblioteca na pasta libraries que o arduino cria nos meus documentos ou na pasta que eu extrai o arduino?
    Ja tentei nas duas e não deu. Ele não compila

    ResponderExcluir
    Respostas
    1. Boa noite,

      Como você instalou a IDE ? Coloque na pasta em "meus documentos" e veja se aparece na IDE.

      Abraço!

      Excluir
    2. Pessoal tive o mesmo problema, é que não temos a biblioteca Wire, segue o link onde vcs podem acrescentar na suas bibliotecas: https://github.com/codebendercc/arduino-library-files

      Excluir
  53. Bom dia !
    Estou com um problema na hora de transferir os dados para o arduino, aparece a seguinte frase
    "exit status 1
    Error compiling for board Arduino/Genuino Uno." o que pode ser ? meu display é 20x4 e meu arduino e uno R3n

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Não parece ser nada relacionado ao programa. Você tentou transferir algum outro ?

      Abraço!

      Excluir
  54. ola, o meu esta dando o seguinte erro.
    Arduino: 1.6.8 (Windows 7), Placa:"Arduino/Genuino Uno"

    C:\Program Files (x86)\Arduino\libraries\LiquidCrystalIC2\I2CIO.cpp:35:26: fatal error: ../Wire/Wire.h: No such file or directory

    #include <../Wire/Wire.h>

    ^

    compilation terminated.

    exit status 1
    Error compiling for board Arduino/Genuino Uno.

    This report would have more information with
    "Show verbose output during compilation"
    option enabled in File -> Preferences.


    e esta selecionado o arduino uno la nas configurações normal...
    sabe dizer o que poderia ser? obrigado

    ResponderExcluir
  55. Meu Deus espero que tenha alguem oline :)

    // Programa : Display LCD 16x2 e modulo I2C
    // Autor : Arduino e Cia

    #include
    #include

    // Inicializa o display no endereco 0x27
    LiquidCrystal_I2C lcd(0x27,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("Arduino e Cia !!");
    lcd.setCursor(0,1);
    lcd.print("LCD e modulo I2C");
    delay(1000);
    lcd.setBacklight(LOW);
    delay(1000);
    }

    Ao compilar da erro:
    Error compiling for board Arduino/Genuino Uno.

    ResponderExcluir
  56. Olá pessoal, alguem pode me informar onde consigo ou me enviar o arquivo do LCD 20x4 o do I2C para desenhar no Fritzing? Qualquer coisa por emial, evandropci@yahoo.com.br
    Grato

    ResponderExcluir
  57. Boa noite estou pegando o programa para fazer um teste mais quando esta carregando aparece o seguinte erro Arduino: 1.6.8 (Windows 7), Placa:"Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"

    C:\Users\Bruno\Documents\Arduino\libraries\LiquidCrystal_I2C\I2CIO.cpp:35:26: fatal error: ../Wire/Wire.h: No such file or directory

    #include <../Wire/Wire.h>

    ^

    compilation terminated.

    Foram encontradas múltiplas bibliotecas para "LiquidCrystal_I2C.h"
    Usado: C:\Users\Bruno\Documents\Arduino\libraries\LiquidCrystal_I2C
    Não usado: C:\Users\Bruno\Documents\Arduino\libraries\LiquidCrystalI2C
    Não usado: C:\Users\Bruno\Documents\Arduino\libraries\LiquidCrystal
    exit status 1
    Error compiling for board Arduino/Genuino Mega or Mega 2560.

    This report would have more information with
    "Show verbose output during compilation"
    option enabled in File -> Preferences.

    poderia me auxiliar onde estou errado baixei a biblioteca no link mudei o nome mais continua dando esse conflito help!!!!

    ResponderExcluir
  58. Estou utilizando um PCF8574P ligado com um display 16×2, a IDE que utilizo é1.6.7 mas não estou conseguindo fazer funcionar, aparece só as primeiras letras de cada linha. Usando a IDE 0022 e outra biblioteca está funcionando normalmente, mas essa IDE é muito ruim, alguém sabe a solução para o problema nessa IDE mais nova? Já usei varias bibliotecas e nenhuma funcionou direito... ????

    ResponderExcluir
    Respostas
    1. Pra quem estiver com esse problema de aparecer apenas a primeira letra de cada linha, é um bug da biblioteca, baixe esta:
      https://github.com/marcoschwartz/LiquidCrystal_I2C
      pra mim funcionou.

      Excluir
  59. Toda vez que tento, qualquer coisa que eu escreva só aparece no lcd a primeira letra. Alguem sabe como resolver?

    ResponderExcluir
    Respostas
    1. Oi João,

      Vc soldou o módulo no LCD ? Isso me parece problema de conexão.

      Abraço!

      Excluir
    2. Pra quem estiver com esse problema de aparecer apenas a primeira letra de cada linha, é um bug da biblioteca, baixe esta:
      https://github.com/marcoschwartz/LiquidCrystal_I2C
      pra mim funcionou.

      Excluir
  60. Bom dia, estou com o seguinte erro na compilação do programa:


    C:\Program Files (x86)\Arduino\libraries\LiquidCrystal_I2C\I2CIO.cpp:35:26: fatal error: ../Wire/Wire.h: No such file or directory

    #include <../Wire/Wire.h>

    ^

    compilation terminated.

    Usando a biblioteca Wire na versão 1.0 na pasta: C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire
    Usando biblioteca LiquidCrystal_I2C na pasta: C:\Program Files (x86)\Arduino\libraries\LiquidCrystal_I2C (legacy)
    exit status 1
    Erro compilando para a placa Arduino/Genuino Uno



    sou novo em arduino, alguem pode me ajudar?

    ResponderExcluir
    Respostas
    1. Boa noite,

      Está faltando a biblitoeca wire na sua IDE.. qual versão de IDE você está usando ?

      Abraço!

      Excluir
    2. Obrigado pela atenção. A IDE é 1.6.9, ja desinstalei e instalei umas tres vezes e nada, sempre o mesmo erro.

      obrigado pela ajuda.

      Excluir
    3. Boa tarde,

      Consegui reproduzir o erro com a versão 1.6.9 da IDE. tente fazer o seguinte:

      1 - entre na pasta da biblioteca LiquidCrystal_I2C
      2 - Edite o arquivo I2CIO.cpp
      3 - altere a linha 35 de:
      #include <../Wire/Wire.h>
      para:
      #include < Wire.h > (retire os espaços em branco)
      4 - Salve o arquivo I2CIO.cpp
      5 - Tente compilar novamente

      Aqui rodou legal depois dessa alteração, só não consegui testar ainda com o módulo I2C.

      Depois me fale se funcionou, por favor. :)

      Abraço!

      Adilson

      Excluir
    4. Boa noite Adilson! voce é o cara, ja estava quase arrancando a solda do i2c do lcd mas agora ficou show de bola

      problema resovido obrigado pela atenção.

      abraços

      Wagner.

      Excluir
    5. Opa! Legal Wagner ! Que bom que funcionou.

      Abraço!

      Adilson

      Excluir
  61. Para descobrir o endereço base I2C deste módulo basta verificar se o circuito integrado existente é o PCF8574T(27H) ou o PCF8574AT(3FH).

    ResponderExcluir
  62. Estou aprendendo ainda a usar o arduino e gostaria de primeiro aprender no simulador e depois fazer na placa!

    Gostaria de Saber qual é o software que você usa para mostrar a montagem?
    http://4.bp.blogspot.com/-_HF49j9nId8/VJB4VCiL9jI/AAAAAAAADOE/Tc9sWafCtVM/s1600/Circuito-Arduino-i2c-display-lcd-16x2.png


    ResponderExcluir
    Respostas
    1. Oi Vinicius,

      Para desenhar os circuitos eu uso o Fritzing, que vc pode baixar neste endereço: www.fritzing.org

      Abraço!

      Excluir
    2. Ah sim, baixei ele aqui, mas não achei por exemplo esse I2C, e alguns módulos... Haha
      Como proceder?

      Excluir
  63. Olá pessoal seguidores do canal Arduino e Cia, depois de longas tentativas e horas de pesquisas, finalmente consegui fazer funcionar meu modulo I2C. No 1º momento ficou oscilando a frase Arduino e Cia acendia e apagava ai troquei o setBacklight LOW por HIGH, ficou beleza. Só uma coisa não entendi, se mexe em algum fio, tem que carregar de novo o código, alguém sabe porque?

    ResponderExcluir
  64. meu lcd não acende a luz de fundo, já usei a tag "lcd.setBacklight(HIGH);" e "lcd.backlight();" e nada... tÔ com biblioteca liquidcrystal v1.2.1 e versão do arduino 1.6.9 , como resolver isso, pq se for ligar luz de fundo diretamente vai ficar uma gambiarra.

    ResponderExcluir
    Respostas
    1. Oi Isaac,

      O jumper do backlight está no conectado corretamente ?

      Abraço!

      Excluir
  65. Olá pessoal, estou tentando utilizar o display WH1602A, e sem sucesso. Coloquei na protoboard, e fiz os ajustes com os pinos, ligando o 16 e o 15 do L2C na porta 1 e 2 do display. Mas mesmo assim o display não funciona. Fica ligado direto, com alto contraste. Inclusive tentei diminuir o contraste via potenciometo do L2C, mas quase não já diferença.

    Notei que se inicio com LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, NEGATIVE); o contraste até ajusta mais, mas mesmo assim o problema persiste.

    Será que tem mais alguma manha para ligar este display no L2C?

    Abraço e obrigado pessoal!

    ResponderExcluir
    Respostas
    1. Boa tarde,

      A pinagem do WH1602A é um pouco diferente. Tente fazer as alteraçõs, comparando com a pinagem do HD44780. Nesse link eu falo da pinagem do WH1602A:

      http://www.arduinoecia.com.br/2013/03/display-lcd-winstar-wh1602a.html

      Abraço!

      Excluir
  66. Olá, segui a orientação descrita acima, fiz o download e descompactei o arquivo. Entretanto, na hora de compilar para o arduino dá o seguinte erro e se pudesse me ajudar ficaria muito grato...


    C:\Program Files\Arduino\libraries\LiquidCrystalI2C\I2CIO.cpp:35:26: fatal error: ../Wire/Wire.h: No such file or directory

    #include <../Wire/Wire.h>

    ^

    ResponderExcluir
  67. Se pudesse me ajudar ficaria muito agradecido, pois segui os passos descritos mas a compilação está dando erro:

    C:\Program Files\Arduino\libraries\LiquidCrystalI2C\I2CIO.cpp:35:26: fatal error: ../Wire/Wire.h: No such file or directory

    #include <../Wire/Wire.h>

    ResponderExcluir
    Respostas
    1. Boa noite Bruno,

      Desculpe a demora. Tente esse procedimento:

      1 - entre na pasta da biblioteca LiquidCrystal_I2C
      2 - Edite o arquivo I2CIO.cpp
      3 - altere a linha 35 de:
      #include <../Wire/Wire.h>
      para:
      #include < Wire.h > (retire os espaços em branco)
      4 - Salve o arquivo I2CIO.cpp
      5 - Tente compilar novamente

      Depois me fale se funcionou, por favor. :)

      Abraço!

      Adilson

      Excluir
  68. No meu caso continua dando o erro NO POSITIVE, como dos outros colegas, baixei a biblioteca do link mas tambem nao resolveu, alguém pode me ajudar?

    ResponderExcluir
    Respostas
    1. Oi Eduardo,

      Você tentou a biblioteca desse link aqui? https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads/LiquidCrystal_V1.2.1.zip

      Abraço!

      Excluir
  69. para os que tem problemas de Compilação com o wire.h
    Resolucao:
    baixe do git https://github.com/codebendercc/arduino-library-files
    descompacte coloque os arquivos da pasta library deste zip na pasta library do arduino

    e resolvido

    ResponderExcluir
  70. Olá. Estou tendo problemas quanto a utilização do LCD. O seguinte erro aparece e não sei como corrigi-lo.

    C:\Program Files (x86)\Arduino\libraries\LiquidCrystal_I2C\LiquidCrystal_SR2W.cpp:48:93: warning: unused parameter 'lines' [-Wunused-parameter]

    void LiquidCrystal_SR2W::init(uint8_t srdata, uint8_t srclock, t_backlighPol blpol, uint8_t lines, uint8_t font)

    ^

    C:\Program Files (x86)\Arduino\libraries\LiquidCrystal_I2C\LiquidCrystal_SR2W.cpp:48:108: warning: unused parameter 'font' [-Wunused-parameter]

    void LiquidCrystal_SR2W::init(uint8_t srdata, uint8_t srclock, t_backlighPol blpol, uint8_t lines, uint8_t font)

    ^

    In file included from C:\Program Files (x86)\Arduino\libraries\LiquidCrystal_I2C\LiquidCrystal_SR3W.h:62:0,

    from C:\Program Files (x86)\Arduino\libraries\LiquidCrystal_I2C\LiquidCrystal_SR3W.cpp:77:

    C:\Program Files (x86)\Arduino\libraries\LiquidCrystal_I2C\LCD.h:71:40: warning: unused parameter 'uSec' [-Wunused-parameter]

    inline static void waitUsec ( uint16_t uSec )

    ^

    C:\Program Files (x86)\Arduino\libraries\LiquidCrystal_I2C\LCD.h:444:43: warning: unused parameter 'value' [-Wunused-parameter]

    virtual void setBacklightPin ( uint8_t value, t_backlighPol pol ) { };

    ^

    C:\Program Files (x86)\Arduino\libraries\LiquidCrystal_I2C\LCD.h:444:64: warning: unused parameter 'pol' [-Wunused-parameter]

    virtual void setBacklightPin ( uint8_t value, t_backlighPol pol ) { };

    ^

    C:\Program Files (x86)\Arduino\libraries\LiquidCrystal_I2C\LCD.h:463:40: warning: unused parameter 'value' [-Wunused-parameter]

    virtual void setBacklight ( uint8_t value ) { };

    Agradeço o retorno.

    ResponderExcluir
  71. Olá. Parabéns para o artigo.
    Uma pergunta: se quero mais que um display, posso conectar os fios do I2C diretamente com todos módulos?

    <a href="http://rentabilidadetesourodireto.com.br” target=”_blank”>Pedro</a>

    ResponderExcluir
    Respostas
    1. Oi Pedro,

      Sim, você usa os mesmos pinos SDA e SCL para todos os módulos. provavelmente você vai precisar de resistores pull-up.

      Dê uma olhada neste artigo, por favor: http://tronixstuff.com/2010/10/20/tutorial-arduino-and-the-i2c-bus/

      Abraço!

      Excluir
  72. Hi! Thanks for this tutorial it's the best I found on the internet!

    ResponderExcluir
    Respostas
    1. Hey "Androsoft" !!! :)

      Thank you very much, and best regards!

      Adilson

      Excluir
  73. Esse programa so deu certo com a primeira biblioteca desse link:

    https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads

    ResponderExcluir
  74. Gostaria de usar este módulo junto com um pc, isso é possível. Quero montar um htpc ou web radio player, tenho vários pcs antigos aqui e não queria comprar um raspberry pi ou similar para isso, sem falar do preço nas alturas. Não achei muita coisa cobre a integração PC + Arduino.

    ResponderExcluir
    Respostas
    1. Oi Robson,

      Você pode usar o Processing para criar uma interface gráfica e se comunicar com o Display. Eu não tenho nenhum artigo específico (ainda) sobre o I2C com Processing, mas tenho outros exemplos aqui no blog, dê uma olhada, por favor:
      http://www.arduinoecia.com.br/search/label/processing

      Abraço!

      Excluir
    2. Vou pesquisar mais, obrigado pela atenção. Abraço.

      Excluir
  75. Obrigado pelas dicas pessoal!
    Não estava fazendo meus displays funcionarem e estas dicas foram muito valiosas! Obrigado!

    ResponderExcluir
  76. Boa noite. Estou tentando configurar o display com um Arduino Uno contendo um ATmega 328p. Sou iniciante na área. Mesmo após carregar o Sketch, o display permanece com a primeira linha toda branca e a segunda apagada. Obs. Esse Arduino tem as conexões SCL e SDA. Tentei nessas e nas analógicas, sem sucesso.

    ResponderExcluir
    Respostas
    1. Meu display também estava assim e seguindo o tutorial, fiz o escaneamento do endereçamento conforme link anexo no post e depois alterei o programa. No meu caso encontrou como 0x3F

      Excluir
  77. Boa noite a todos!
    Obrigado a equipe arduino e Cia por disponibilizar para nós estas informações e essa troca de ideias.
    Vejo que os problemas são semelhantes, estava tendo problemas com erros diversos, fui descobrir minha pasta do arduino estava salva no desktop, foi só enviá-la para pasta meus documentos, copiei o código da programação novamente, ai sim compilou normalmente. Agora é só chegar em casa e passar pro Arduino para ver se deu tudo certo. Ha!!!não se esqueça de seguir os passos acima copiando a biblioteca LiquidCrystal_I2, e colando-a na pasta libraries do Arduino.

    ResponderExcluir
  78. Boa noite a todos!
    Gostaria de agradecer a toda equipe Arduino e Cia, pelas informações aqui postadas e por nos permitir essa troca de informações.
    Sou principiante nesta área, tenho muito que aprender.Vejo que os problemas são semelhantes. O que aconteceu comigo foi que baixei o programa do Arduino no desktop, foi só baixar a biblioteca do "I2C" e copiar na pasta librari, e passar a pasta para meus documentos deu tudo certo, pelo menos a programação. Estou no trabalho, amanhã vou testar com Arduino, se funcionar compartilho com vocês.

    ResponderExcluir
  79. Bom dia!
    Compilei o sketch supra, porém o meu display 16x2 com I2C, fica com o fundo verde e aparece a primeira fileira com retângulos cheios.
    Preciso de ajuda, estou iniciando agora.
    Obrigado.

    ResponderExcluir
    Respostas
    1. Boa noite,

      Confira se o endereço I2C do módulo está correto, por favor.

      Abraço!

      Excluir
  80. Bom dia. Gostaria de saber se é possível conectar mais de um Display LCD e uma mesma placa Arduino Mega. Obrigado.

    ResponderExcluir
    Respostas
    1. Oi Sidnei,

      Sim, a interface I2C permite que vc ligue vários displays em um mesmo barramento. Dê uma olhada no post sobre como mudar o endereço do módulo, pois nesse caso em que você ligar 2 ou 3 deles no mesmo barramento I2C, cada um deve ter um endereço diferente, ok ?

      Abraço!

      Excluir
  81. oi
    fiz a programação arduino uno, led fica azul e piscando não aparece nada, já tentei regular no potenciômetro e não deu certo

    ResponderExcluir
  82. Acabei de testar com um display 20x4 e funciona perfeitamente! ! !
    Obrigado por compartilhar esse conhecimento! ! ! !

    ResponderExcluir
  83. o meu tambem deu erro no positive, e eu tenho ambas as bibliotecas instal
    adas

    ResponderExcluir