Eu tenho uma tela LCD 1602 que funciona bem por conta própria. No entanto, eu queria liberar alguns pinos usando um controlador LCD I2C / IIC que comprei separadamente.
Embora o controlador pareça estar se comunicando com o meu Arduino UNO no endereço correto, não consigo exibir o texto. Por padrão (sem código), parece que o LCD terá 1 linha de 16 "quadrados" sólidos. Ao usar o endereço 27 no meu código, o LCD mudará para 2 linhas de 16 quadrados (veja a foto abaixo). O código também pede que a luz de fundo pisque 3 vezes, o que funciona. No entanto, não consigo nada além de duas linhas de quadrados. (O código completo está na parte inferior desta pergunta).
Estou usando a biblioteca LiquidCrystal_I2C da F Malpartida, que parece ser comumente usada.
Existe uma biblioteca melhor que eu deveria estar usando?
Gostaria de saber se são apenas os pinos errados que estão sendo usados no código. Todos os esboços que vejo online usam os seguintes pinos:
// addr,en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// Set the LCD I2C address
Mas todos os LCDs de 1602 que eu vejo on-line têm os mesmos pinos que os meus, como você pode ver na minha foto abaixo:
Esses pinos parecem ser padrão:
Para me confundir ainda mais, os pinos na placa LCD começam com 1 à esquerda, mas os pinos do código padrão parecem começar com 0! Então, tentei mudar os pinos do código para os números na placa de cristal líquido. O LCD não muda mais para 2 linhas de quadrados e não pisca mais a luz de fundo. Tentei subtrair 1 de cada pino (para começar de 0), mesmo resultado. Então tentei usar os pinos padrão menos 1, mesmo resultado. Assim, os pinos padrão estão de alguma forma mais corretos ?! O que estou fazendo errado?
Alguém mais conseguiu que um desses controladores I2C trabalhasse para eles? Se sim, como?
Código completo:
/* YourDuino.com Example Software Sketch
16 character 2 line I2C Display
Backpack Interface labelled "YwRobot Arduino LCM1602 IIC V1"
[email protected] */
/*-----( Import needed libraries )-----*/
#include <Wire.h> // Comes with Arduino IDE
// Get the LCD I2C Library here:
// https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
#include <LiquidCrystal_I2C.h>
/*-----( Declare objects )-----*/
// set the LCD address to 0x27 for a 20 chars 2 line display
// Set the pins on the I2C chip used for LCD connections:
// addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address
void setup() /*----( SETUP: RUNS ONCE )----*/
{
Serial.begin(9600); // Used to type in characters
lcd.begin(16,2); // initialize the lcd for 16 chars 2 lines, turn on backlight
// ------- Quick 3 blinks of backlight -------------
for(int i = 0; i< 3; i++) {
lcd.backlight();
delay(250);
lcd.noBacklight();
delay(250);
}
lcd.backlight(); // finish with backlight on
//-------- Write characters on the display ------------------
// NOTE: Cursor Position: (CHAR, LINE) start at 0
lcd.setCursor(0,0); //Start at character 4 on line 0
lcd.print("Hello, world!");
delay(1000);
lcd.setCursor(0,1);
lcd.print("HI!YourDuino.com");
delay(8000);
// Wait and then tell user they can start the Serial Monitor and type in characters to
// Display. (Set Serial Monitor option to "No Line Ending")
lcd.clear();
lcd.setCursor(0,0); //Start at character 0 on line 0
lcd.print("Use Serial Mon");
lcd.setCursor(0,1);
lcd.print("Type to display");
}/*--(end setup )---*/
void loop() /*----( LOOP: RUNS CONSTANTLY )----*/
{
{
// when characters arrive over the serial port...
if (Serial.available()) {
// wait a bit for the entire message to arrive
delay(100);
// clear the screen
lcd.clear();
// read all the available characters
while (Serial.available() > 0) {
// display each character to the LCD
lcd.write(Serial.read());
}
}
}
}/* --(end main loop )-- */
Respostas:
Primeiro de tudo, parece que esses fios não estão conectados corretamente:
Eu não desmontei um jumper feminino antes, então esse pode não ser o problema. No entanto, parece provável que isso possa ser uma causa.
Além disso, você precisa ajustar o contraste girando o aparador (a coisa azul que parece meio que tem um parafuso). Os LCDs não exibirão nada, uma versão desbotada do texto ou caixas azuis se o contraste não estiver definido corretamente. Esta é provavelmente a causa.
fonte
Comprei o SainSmart 20x04 e também tive que mudar o endereço para
0x3F
. Meu jumper de luz de fundo estava ausente, aquele pequeno cabeçalho à direita da placa I2C fornece a energia de luz de fundo. Alguns códigos que encontrei incluíam isso:fonte
Tenho o mesmo problema e o corrigi alterando o endereço do LCD 1602A, que está nos tutoriais 0x27, mas no meu dispositivo é 0x3F.
Boa sorte!
fonte
LiquidCrystal_I2C lcd(0x3F,16,2);
. Muito obrigado!Tanto quanto eu sei, os resistores pull-up devem ser integrados ao monitor.
Você tentou endereços diferentes? Eu tenho um semelhante, que funciona no endereço 0x3F. Talvez isso ajude.
fonte
Mude este código:
Para isso:
(O argumento antes de "POSITIVO" é alterado de 3 para 8)
fonte
Tenho certeza de que este link será útil para você, tenho o mesmo LCD e trabalhei com o I2C seguindo as etapas neste link http://forum.arduino.cc/index.php?topic=128635.0
fonte
O módulo I2C D6-> P5 é D5-> P6 (invertido).
fonte
Ctrl+K
para que seu navegador faça isso por você. Sua resposta seria mais útil se você tivesse mais detalhes.