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

Hola compañeros de fatiga ...

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:

  • 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!!!!

DIOS SANTO LO CONSEGUÍ...., TAL COMO DIJE HARÉ EL TUTO Y LO PONDRÉ....

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!!!!!!!!!!!!!

muy bueno el tutorial pero te falto adjuntar la libreria y fotos de tu pantalla y del modulo i2c ya que este tutorial solo funcionaría para este modelo en particular.

y si agregas [SOLUCIONADO] al titulo de tu primer mensaje quedara listo.