No consigo sacar el texto con LCD I2c 20x4 con Arduino uno v3, ayuda por favor!!

Hola compañeros de fatiga :wink: ...

De entrada deciros que si consigo hacer que vea el texto haré un pedazo de tutorial con fotos paso a paso para que le sirva a otro...., lo prometo...!

Os comento mi pesadilla: :cry:

  • LCD azul 20x4 mod. QC2004A con controlador Funduino con el LCM1602 para I2C.
  • Arduino uno rev. V3 con versión IDE 1.6.0 sobre Windows XP.

Tras pasarle el scanner de I2C el programa me detecta el dispositivo en la dirección 27.
Con todas las librerías que he podido encontrar junto con su sketch básico para funcionar, también he probado los programita si que vienen de ejemplo (de aquellos de "hello world").

Pues con algunos hace la pantalla algún parpadeo con la luminosidad, o se queda apagado, otros da error al compilar...

Total se lo máximo que consigo es eso, que haga algún parpadeo pero saliendo los caracteres llenos en las filas 0 y 2... Y la 1 y 3 vacía (señal que no recibe info, creo, que no se asuste nadie si le sale...)

He probado poner las conexiones de I2C con:

  • pin Vcc >> +5v
  • pin GND>> GND
  • pin SDA >> data al SDA de Arduino (al lado del reset) , o al 4 analógico también.
  • pin SCL >> clock al SCL de Arduino (al lado del SDA) , o al 5 analógico también.

En los programas he cambiado la dirección por la 27 y puesto que es 20 y 4 (0x27,20,4) para el LCD, tambien he probado otras direcciones....

Las resistencias que se mencionan por ahí creo que no hacen falta por que ya van incorporadas en el controlador I2C, creo.

Total: que estoy desesperado, ya no se qué hacer, ojalá alguien me pueda iluminar y lo agradeceré haciendo un Tuto guapo...., no se sí es problema de compatibilidad con el Funduino o con la librería, pffff. Ayudaaaaaa!!!!
:cry: :cry: :cry:

Saludos
Espero ese tutorial ya que tampoco he podido hacer comunicar con ese modulo la LCD 20x4, solo me ha funcionado con la 16X2.

Ahora un consejo no hagas doble post.

DIOS SANTO, LO CONSEGUÍ!!!

TAL COMO PROMETÍ HARÉ EL TUTORIAL DE COMO FUNCIONA EL LCD 20x4 con el controlador 1602 I2C....

@max-saeta no desesperes , sí que funciona , déjame que lo ponga bien el tutorial y lo pongo para que todos lo vean...

Y porque no lo cuentas acá primero porque si no lo haces este post queda inconcluso?
Luego si, repite tu experiencia en el TUTORIAL.

Si max tuvo problemas entonces es interesante saber la solución!

Bueno, os explico como lo conseguí por fin. Aunque parece una tontería pero he leído de multitud de casos en los que mucha gente se ha dado de cabeza igual que yo y no encontraba solución...

Os pongo paso a paso para que no haya confusión y empezando de cero, los pasos que hayáis hecho los saltáis pero yo me volví loco hasta que lo vi.

Nota: Cuando visualiza 2 barras llenas y dos vacías simplemente quiere decir que la pantalla no recibe ninguna información..., que nadie se asuste.

Material:

  • Arduino Uno rev.3
  • Lcd 20x4 fondo azul con controlador I2C (LCM 1602) funduino.

Soft:

  • Windows XP sp3 (en los demas se supone que tambien, os pongo mi caso).
  • Arduino soft (arduino IDE 1.0.6, las posteriores no las he probado).
  • Libreria liquidcrystal: HCMODU0010_LiquidCrystal_I2C_V2_1.zip

Paso 1:
-Conexion electrica al Arduino:

Cable VCC>+5v de arduino
Cable GND>GND de arduino
Cable SDA> (datos) al SDA o 4 analogico de arduino UNO, prefiero SDA así queda libre la entrada.
Cable SCL (clock) al SCL o 5 analogico de arduino UNO, prefiero SCL así queda libre la entrada.

Paso 2:
-Encontrar la direccion de comunicacion de I2C, normalmente es la 20 o 27, pero para estar seguros se puede pasar el scanner I2C que pongo el codigo abajo.., se ejecuta el sketch y en la ventana de comunicacion serie(herramientas, comunicacion serial) nos ira diciendo que direccion encuentra el dispositivo una vez conectado..

Paso 3:

  • Quitar la libreria LiquidCrystal del directorio "Arduino/libraries", (la puedes guardar en otro sitio).

  • Quitar todo resto de librerias liquidcrystal_I2C si tuvieras otras...

  • Eliminar del directorio de "Mis documentos/arduino/librerias" las librerias si hay de LCD para que no tengan conflictos.

  • Colocar la libreria correcta con la version correcta de comunicacion. Aquí viene cuando lo matan..:
    Tras descargar el enlace que pongo de la libreria descargarlo al escritorio y renombrar el directorio a "LiquidCrystal_I2C", entonces la movemos al directorio de "Arduino/libraries"

  • Lo hice con la version IDE de arduino 1.0.6 (la encuentro mucho mas rapida y fluida en cargar y para lo que tengo que hacer ya tengo..., se supone que las posteriores tambien funcionaran..)

  • Al Probar un monton de librerias y codigos que daban error de compilacion la unica que me ha funcionado ha sido la que he expuesto.

Codigo Scanner: cada 5 segundos te da tu direccion I2C en la comunicacion serie de arduino

#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
}

Codigo para visualizacion (despues que le envie texto le añades tu codigo):

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

/* Create some custom graphic characters to make a simple border */
uint8_t TopLeftCorner[]  = {0x00,0x00,0x0f,0x08,0x0b,0x0a,0x0a,0x0a};
uint8_t TopRightCorner[]  = {0x00,0x00,0x1e,0x02,0x1a,0x0a,0x0a,0x0a};
uint8_t BottomLeftCorner[]  = {0x0a,0x0a,0x0b,0x08,0x0f,0x00,0x00,0x00};
uint8_t BottomRightCorner[]  = {0x0a,0x0a,0x1a,0x02,0x1e,0x00,0x00,0x00};
uint8_t VerticalBar[]  = {0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a};

/* Initialise the LiquidCrystal library. The default address is 0x27 
   and this is a 20 x 4 line display */
LiquidCrystal_I2C lcd(0x27,20,4); en mi caso LCD 20x4 en direccion 27


void setup() 
{
  /* Initialise the LCD */
  lcd.init();
  /* Transfer the custom characters into the LCD's memory */
  lcd.createChar(0, TopLeftCorner);
  lcd.createChar(1, TopRightCorner);
  lcd.createChar(2, BottomLeftCorner);
  lcd.createChar(3, BottomRightCorner);
  lcd.createChar(4, VerticalBar);
}

/* Main program loop */
void loop() 
{
  /* Make sure the backlight is turned on */
  lcd.backlight();

  /* Use the custom graphic characters to draw a border */
  lcd.setCursor(0, 0);
  lcd.write(0); //Write the top left graphic 
  lcd.print("==================");
  lcd.write(1); //Write the top right graphic 
  lcd.setCursor(0, 1);
  lcd.write(4); //Write the vertical bar graphic 
  lcd.setCursor(0, 2);
  lcd.write(4); //Write the vertical bar graphic 
  lcd.setCursor(19, 1);
  lcd.write(4); //Write the vertical bar graphic 
  lcd.setCursor(19, 2);
  lcd.write(4); //Write the vertical bar graphic 
  lcd.setCursor(0, 3);
  lcd.write(2); //Write the bottom left graphic 
  lcd.print("==================");
  lcd.write(3); //Write the bottom right graphic 
  
  /* Display some text inside the border */
  while (1)
  {
    lcd.setCursor(2,1); 
    lcd.print("HOBBY COMPONENTS");
    lcd.setCursor(2,2); 
    lcd.print("**HELLO WORLD**");
    delay(500);
    lcd.setCursor(2,1); 
    lcd.print("                ");
    lcd.setCursor(2,2); 
    lcd.print("               ");
    delay(500);
  }
}

Suerteee!!!!!!!!!!!!!

HCMODU0010_LiquidCrystal_I2C_V2_1.zip (21.8 KB)

Saludos
Te comento, no me funciona a la primera, pero como en otros casos cuando manejaba esta LCD de 20x4 tenia que colocar un delay de 15 ms, abri la libreria, y en la parte de ::command modifique:

inline void LiquidCrystal_I2C::command(uint8_t value) {
	send(value, 0);
	delay(15);
}

Y ahora funciona correctamente.

Les comento mi caso a ver si me ayudan, mi proyecto trabajado en arduino obviamente va a estar conectado con la fuente de 5v y con el cable RJ45(Ethernet), estoy utilizando la libreria:

#include <LiquidCrystal_I2C.h>

ahora mi duda es si no tengo conectado el puerto serial a la arduino y utilizo los puertos SDA y SCL para la LCD no me aparece nada en la LCD, como podria hacer para no utilizar el puerto serial y aun asi poder conectar la LCD a los puertos SDA y SCL y ademas que me presente lo que le mando a mostrar, gracias.

Saludos jguillen89

Y como podremos ayudarte si no colocas tu codigo?

Les adjunto mi codigo en .ino debido a que es demasiado extenso, gracias.

CodigoSensores3.0.ino (41.5 KB)

jguillen89:
Les comento mi caso a ver si me ayudan, mi proyecto trabajado en arduino obviamente va a estar conectado con la fuente de 5v y con el cable RJ45(Ethernet), estoy utilizando la libreria:

#include <LiquidCrystal_I2C.h>

ahora mi duda es si no tengo conectado el puerto serial a la arduino y utilizo los puertos SDA y SCL para la LCD no me aparece nada en la LCD, como podria hacer para no utilizar el puerto serial y aun asi poder conectar la LCD a los puertos SDA y SCL y ademas que me presente lo que le mando a mostrar, gracias.

Pregunta simple y básica: has logrado que el LCD i2C presente información usando algun demo?
Si no logras eso olvida tu programa.
Primero usa un demo, asegura que dominas la dirección de tu display, que si no sabes detectas con el scanner i2C y luego ajustas los pines, y muestras algo como "Hola"y listo.
Corriges en tu sketch y sale funcionando.

disculpen se que no es el foro sobre el tema apropiado pero espero y puedan ayudarme, estoy intentando enviar datos a través de i2c pero el tamaño de los datos es de 8 bits y quiero enviar datos de 10 bits ahora lo que hago es enviar dos tramas de 8 bits mediante corrimiento de los números binarios como les indico a continuación:

int prueba = 1023;

byte trama[2];

trama[0] = (prueba >> 8) & 0xFF;
trama[1] = prueba & 0xFF;

Wire.write(trama,2 );

el caso anterior seria para enviarlos y este seria el dispositivo que recibe

Wire.request(54, 2);

a = Wire.read();
b = Wire.read();

prueba= a;
prueba2= (prueba << 8) | b;

el problema es que al momento de leer lo que envio en el otro dispositivo solo me lee trama[0] en a y b no logro enviar el arreglo de bit completo... cual puede ser mi error?

Hola gente.

Mucha Gracias por el tutorial Rafaelquero. Es el que más me ha funcionado de los que he intentado hacer.
Estoy dando mis primero pasos en este mundo y el LCD I2C se me está atragantando.
Mi problema es que el LCD solo representa el primer caracter de la primera palabra. El resto no aparece.
O sea, del comando lcd.print("HOBBY COMPONENTS"); solo me aparece la "H".
He conseguido escribir algo completo pero a base de hacerlo letra por letra y usando lcd.setCursor para ir cambiando la posición. Es la única manera con la que he conseguido ver que el lcd funciona.
He cambiado varias librerías pero todas me pasa lo mismo. Y la he usado en Arduino UNO y en un MEGA.
A ver si alguien tiene idea de que puede ser.
Muchas gracias.

Y que librería usas? Pon el enlace usando tags.
tambien el código usando tags.
Si no sabes como lee las normas.
La proxima crea un hilo nuevo ya que éste tiene mas de 120 días y ya estaba solucionado.

Hola.
He seguido el tutorial de Rafaelquero, sus librerías y he quitado las librerías antiguas.
También he usado las demos que aparecen en sus librerías. Una no me funciona (serial Display Arduino) y la otra representa casi todos los caracteres (Custom Char Arduino).
También seguí este otro tutorial - YouTube
Todos me dan el mismo fallo. Solo se representa la primera letra de la frase.
Al final he conseguido hacer que funcione con este tutorial y las librerías que en el incluye.
https://arduino-info.wikispaces.com/LCD-Blue-I2C
Muchas Gracias a todo por la ayuda y siento haber pecado de novato con las normas del foro.
Gracias de nuevo.

Se me olvidó preguntar que IDE usas. Si usas uno de los últimos (1.6.5 en adelante) no se la razón pero te recomendaría pruebes con uno como el 1.6.0. Vas al mismo sitio de descargas y a la derecha dice Previous Releases. Y ahi lo encuentras.

Hola.. me voy a mirar este apartado con mucha paciencia..pues mi LCD 20x4 con i2c en mi imac no funciona me aparece en cada linea solamente la letra H...
bueno un saludo