Problema con LCD 20x4

He comprado un LCD de 20x4 y trae una placa por su parte posterior donde solo tengo que conectar 4 cables.

Tengo problemas con el código.
Para comenzar he cogido el de esta web: http://arduino-info.wikispaces.com/LCD-Blue-I2C

Pero a la hora de compilar me salta en esta línea:

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

Me dice que POSITIVE es una variable no descrita.

¿Que le hago?.

Falta agregar la libreria LCD.h para que te tome el dato enumerado, sino coloca 0 o 1 para POSITIVE,NEGATIVE respectivamente.

¿Sabes de donde la puedo descargar?
La he buscado, pero no la encuentro.

Gracias

está en la carpeta de la libreria. esta explicado en la misma pagina.
https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
recuerda colocarla en una carpeta a tu libreria y quitar la que trae arduino, sino no funciona.

En principio, no hace falta que borres la librería "LiquidCrystal" original, ya que tu tienes que usar la "LiquidCrystal_I2C". Agrega la librería a la carpeta de librerías de usuario, dentro de user/documentos/arduino/libraries.

Yo la metería dentro de una carpeta que se llame "LiquidCrystal_I2C", de forma que así se diferencia totalmente de la "LiquidCrystal" original.

En principio, no hace falta que borres la librería "LiquidCrystal" original, ya que tu tienes que usar la "LiquidCrystal_I2C". Agrega la librería a la carpeta de librerías de usuario, dentro de user/documentos/arduino/libraries.

No se si hice bien, pero he agregado la librería directamente:
sketch- Importar libría - Add Library.
Quizas este no sea el mejor método para añadirlas. Aparecer, aparece en el listado de librerías en el arduino.

está en la carpeta de la libreria. esta explicado en la misma pagina.
https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
recuerda colocarla en una carpeta a tu libreria y quitar la que trae arduino, sino no funciona.

¿Cual descargo de las 4?
He descargado la primera "Download repository" y al añadirla me dice esto:

"La lirería "fmalpartida-new-liquidcrystal-4ab8294150b5" no puede ser utilizada. Los nombres deben contener letras básicas y números (Solo ASCII sin espacios y no puede empezar con un número""

Por una parte me parece normal.
He abierto el archivo ZIP descargado y tiene un mogollón de archivos

¿Que hago mal?

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

y de descomprimes en una carpeta y listo

Bueno.

Después de trastear un poco con el LCD con I2C, he conseguido que por fin me funcione.

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

y de descomprimes en una carpeta y listo

No descargue esta librería, mas que nada porque no habia ingresado en el foro.
En su vez he descargado esta:

Abri una carpeta nueva. La llame LiquidCrystal_I2C y descomprimi en ella los archivos LiquidCrystal_I2C

Hasta ahora funciona perfectamente.

Me parece curioso que no me hace falta ponerle nada de POSITIVO, o NEGATIVO.
Con este código funciona perfectamente:

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

LiquidCrystal_I2C lcd(0x20,20,4); // set the LCD address to 0x20 for a 20 chars and 4 line display

void setup()
{
lcd.init(); // inicializa el lcd

// Print a message to the LCD.
lcd.backlight(); //Enciende la luz del LCD
lcd.setCursor(3,0);
lcd.print("Hola, MUNDO");
delay(1000);
lcd.setCursor(3,2);
lcd.print("Como estas?");
delay(1000);

for(int i = 0; i< 6; i++)
{
lcd.noBacklight();
delay(250);
lcd.backlight();
delay(250);
}
lcd.setCursor(3,3);
lcd.print ("BIENNNNNNNN");

}
void loop()
{
}

Muchisimas gracias por todo:

¿Alguien ha probado con el LCD 128x64?
Igual no es tan sencillo de conectar al Arduino.

Yo lo he hecho de la siguiente manera, para probar:

He descargado el archivo que dice maxid, he descomprimido la carpeta que se llama LiquidCrystal, y la he renombrado como LiquidCrystal_I2C

Solamente descomprimo esa carpeta, ya que la otra que se llama _MACOSX, entiendo que es para Mac, y yo uso un PC.

Después, muevo la carpeta a: C:\Users\nombreusuario\Documents\Arduino\libraries
Cambia nombreusuario por el usuario que tengas en tu pc.

Y ya está. Yo uso la vesión 1.5.7 del IDE de arduino, y al abrir el menu file/examples, me aparecen primero los ejemplos que lleva el IDE, luego, separado por una linea horizontal, los ejemplos de las librerías que lleva el IDE, y más abajo, también separado por una linea horizontal, los ejemplos de las librerías de usuario. Allí, te vas a LiquidCrystal_I2C, y puedes probar con el ejemplo HelloWorld_i2c, verás que solamente usa 2 librerías, no todas las que te añade el menú sketch/add library.

Creo que dentro de la misma carpeta de la librería, hay más librerías de LCD para diferentes medios de comunicación, no solamente el i2c, por eso es mejor ver los ejemplos específicos.

Perfecto Cameloco!

Haré lo que dices y así pruebo la librería que nos puso Maxid.
Ya que se ha preocupado quiero probarla.

¿Alguien ha probado a conectar un LCD128x64?

Me llama la atención por grande, pero no se si será complicado programar con ella.

Hay una diferencia importante entre un LCD 20x4 y un LCD 128x64. El primero es de tipo texto, y el segundo es de tipo gráfico.

No he probado nunca un LCD de tipo gráfico, pero supongo que se debe usar de forma parecida al TFT.

Por cierto, ¿dónde has comprado el LCD I2C? Estoy en medio de un proyecto que incluye pantalla, y el LCD normal me da problemas, y las TFT, es un lío bestial meter números, ya que hay que convertirlos antes a tipo string, de forma que ya voy descartando TFT o displays gráficas, ya que me ocupan demasiado tiempo en escribir en la pantalla.

Creo que el I2C, por su simplicidad me podría servir, ya que necesito que el código corra fluido, porque se hacen lecturas continuas por el puerto serie a mucha velocidad, y retrasos en el código, creo que me hacen para las lecturas de puerta serie.

los display gaficos tinen 2 modos de operacion. grafica y texto. De esta forma cambia la velocidad y el tipo de entrada de datos.

Bueno, creo que de momento, intentaré tirar con esto:

carmeloco:
Por cierto, ¿dónde has comprado el LCD I2C? Estoy en medio de un proyecto que incluye pantalla, y el LCD normal me da problemas, y las TFT, es un lío bestial meter números, ya que hay que convertirlos antes a tipo string, de forma que ya voy descartando TFT o displays gráficas, ya que me ocupan demasiado tiempo en escribir en la pantalla.

Lo he comprado aqui:

http://cgi.ebay.es/ws/eBayISAPI.dll?ViewItem&item=221495258505

OK, lleva el mismo circuito para I2C que el que he comprado yo por separado, para ponerlo en el display que yo quiera

Si señor es el mismo módulo.
Los puentes en A0, A1, A2 tambien los he hecho así, para que tengan dirección 0x20.

No se lo que es dirección 0x20, pero por lo que he leido hacía falta hacerselos.

Espero que te funcione.

¿A los LCD le soleis poner resistencias el Pull-Up o Pull-Down?

El protocolo i2c tiene una direccion a quien va el dato enviado, el dispositivo que tenga la direccion 0x20 es el que responde con ack que le llegó el dato.
Puedes tener 2 display iguales uno con direccion 0x20 y otro con 0x21 y le envias datos diferentes para graficar.
Las resistencias de pull-up son porque es salida de colector abierto http://www.tutoelectro.com/resistencias-pullup-pulldown-y-salidas-en-colector-abierto/ por lo que no tiene tension de polarizacion para el bit alto.
El valor generalmente es de 4700ohms para la mayoria de los casos.
Pero tambien depende de la velocidad que trabaje el bus esta puede ser mayor o menor valor.

También podías haber dejado los puentes sin hacer, y cambiar esta parte del código:

LiquidCrystal_I2C lcd(0x20,20,4);

por esta:

LiquidCrystal_I2C lcd(0x27,20,4);

¿Alguien conoce el fabricante del módulo en cuestión o la web donde aparezca el esquema?

Es que no sé por qué me dá a mí, que el módulo, ya lleva resistencias pull-up internas.

El módulo que yo he comprado es este:

mas facil, con un tester mide si hay continuidad, entre sda y una de las resistencias que dice 472 y scl y la otra resistencia. Y el otro extremo de la resistencia debe ir a +5vcc