Tengo una pantalla LCD 1602 que funciona bien por sí sola. Sin embargo, quería liberar algunos pines usando un controlador LCD I2C / IIC que compré por separado.
Si bien el controlador parece estar comunicándose con mi Arduino UNO en la dirección correcta, no puedo mostrar el texto. Por defecto (sin código) parece que la pantalla LCD tendrá 1 línea de 16 "cuadrados" sólidos. Cuando uso la dirección 27 en mi código, la pantalla LCD cambiará a 2 líneas de 16 cuadrados (ver foto a continuación). El código también requiere que la luz de fondo parpadee 3 veces, lo que funciona. Sin embargo, no puedo obtener nada más que 2 líneas de cuadrados. (El código completo está al final de esta pregunta).
Estoy usando la biblioteca LiquidCrystal_I2C de F Malpartida, que parece ser de uso común.
¿Hay una mejor biblioteca que debería estar usando?
Me pregunto si solo se usan los pines incorrectos en el código. Todos los bocetos que veo en línea usan los siguientes pines:
// 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
Pero todos los 1602 LCD que veo en línea tienen los mismos pines que los míos, como puedes ver en mi foto a continuación:
Estos pines parecen ser estándar:
Para confundirme más, los pines en la placa LCD comienzan con 1 a la izquierda, ¡pero los pines del código predeterminado parecen comenzar con 0! Así que intenté cambiar los pines del código a los números en la placa LCD. La pantalla LCD ya no cambia a 2 líneas de cuadrados y ya no parpadea la luz de fondo. Luego intenté restar 1 de cada pin (para comenzar desde 0), el mismo resultado. Luego intenté usar los pines predeterminados menos 1, el mismo resultado. ¿Entonces los pines predeterminados son de alguna manera más correctos? ¿Qué estoy haciendo mal?
¿Alguien más ha conseguido que uno de estos controladores I2C trabaje para ellos, y si es así, cómo?
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 )-- */
Respuestas:
En primer lugar, parece que estos cables no están conectados correctamente:
No he desarmado un puente femenino antes, por lo que ese podría no ser el problema. Sin embargo, parece probable que esto pueda ser una causa.
Además, debe ajustar el contraste girando esa recortadora (la cosa azul que parece un poco tiene un tornillo). Las pantallas LCD no mostrarán nada, una versión borrosa del texto o cuadros azules si el contraste no está configurado correctamente. Esta es probablemente la causa.
fuente
Compré el SainSmart 20x04 y también tuve que cambiar la dirección
0x3F
. Faltaba mi puente de luz de fondo, ese pequeño encabezado a la derecha de la placa I2C proporciona la potencia de la luz de fondo. Algunos códigos que encontré incluyen esto:fuente
Tengo el mismo problema y lo soluciono simplemente cambiando la dirección de la LCD 1602A, que está en los tutoriales 0x27 pero en mi dispositivo es 0x3F.
¡Buena suerte!
fuente
LiquidCrystal_I2C lcd(0x3F,16,2);
. ¡Muchas gracias!Hasta donde sé, las resistencias pull-up deberían integrarse con la pantalla.
¿Intentaste diferentes direcciones? Tengo uno similar, que funciona en la dirección 0x3F. Quizás esto ayude.
fuente
Cambia este código:
A esto:
(El argumento antes de "POSITIVO" se cambia de 3 a 8)
fuente
Estoy seguro que este enlace será útil para usted, tengo el mismo lcd y lo conseguí trabajo con I2C siguiendo los pasos de este enlace http://forum.arduino.cc/index.php?topic=128635.0
fuente
El módulo I2C D6-> P5 es D5-> P6 (invertido).
fuente
Ctrl+K
para que su navegador lo haga por usted. Su respuesta sería más útil si entrara en más detalles.