hola, buenas tardes, estoy intentando programar un lcd de 2 lineas. He usado la libreria lcd4bits que hay en la web, pero la placa que he hecho no utiliza los mismos pines de arduino que los que estan puestos en la libreria. Intento cambiarle los pines pero nada, no funciona el programa de ejemplo. ¿Hay que recompilar la libreria o algo para que se modifiquen las direcciones de los pines?
Tienes que eliminar el archivo *.o (LCD4Bit.o). Ya que es la libreria compilada. Al borrarla, cuando compiles tu proyecto de nuevo, se creará con la nueva configuración del archivo *.cpp y *.h (en la cual cambiaste los pines para tu aplicación).
Busca en la ruta: arduino\hardware\libraries\LCD4Bit
En dicha carpeta, tienes el archivo "readme.txt" que te explica ésto.
Lo copio aqui:
After a successful build of this library, a new file named "LCD4Bit.o" will appear
in "Arduino/lib/targets/libraries/LCD4Bit". This file is the built/compiled library
code.
If you choose to modify the code for this library (i.e. "LCD4Bit.cpp" or "LCD4Bit.h"),
then you must first 'unbuild' this library by deleting the "LCD4Bit.o" file. The
new "LCD4Bit.o" with your code will appear after the next press of "verify"
de acuerdo Igor muchas gracias, por tu respuesta. He puesto los pines correctos y he recompilado. Sigue sin funcionar. ¿Los pines corespondientes a DB4, DB5, DB6 Y DB7 deben ser correlativos o es indiferente? Estoy empezando a sospechar de que el LCD está roto.
Si lees el archivo LCD4Bit, deben ser consecutivos:
//RS, RW and Enable can be set to whatever you like
int RS = 12;
int RW = 11;
int Enable = 2;
//DB should be an unseparated group of pins - because of lazy coding in pushNibble()
int DB[] = {7, 8, 9, 10}; //wire these to DB4~7 on LCD.
Este código es como lo tengo yo en una de mis aplicaciones. En mi caso, no uso el pin RW, ya que lo dejo siempre en GND, para tenerlo en Read y ahorrarme un pin.
En la función pushNibble, hace un bucle for, en la cual usa la variable i que incrementa de uno en uno, siendo el valor inicial i=DB[0] hasta i=DB[3]. Si no son consecutivos, yo creo que no funcionaría.... :o
Ponlos consecutivos, y me dices si te funciona....
Lo probaré poniendo pines consecutivos, pero ahora mismo no me es posible, se me ha hecho algo tarde... :-[ Tambien podría solucionarse el problema modificando ese bucle, que por otro lado, parece que está algo enrevesado... no se...
¿Si lo cambiamos por este otro bucle se solucionaria el problema de la necesidad de poner pines consecutivos en el array DB[]?
En el readme de la libreria he leido que puede dar algun que otro warning al compilar. Ya probaré con otro LCD... Trapicheando con la libreria, le he hecho unas pequeñas modificaciones para poder modificar los pines desde el programa del usuario y para evitar tener que poner pines consecutivos, no la he podido probar en el LCD pero yo creo que está bien... Aquí os la dejo por si quereis echarle un vistazo
Ya he descubierto el error. En el ejemplo, llamaba a la función init() antes de especificar los pines utilizados para el LCD, por lo que no se configuraban bien como salidas. Ya está corregida la libreria y funcionando.
Las diferencias con la libreria original son:
Los pines especificados no tienen que ser consecutivos.
Se pueden modificar los pines desde el programa usuario, sin modificar la clase.
Ejemplo de configuracion:
lcd.setE(6);
lcd.setRW(5);
lcd.setRS(4);
lcd.setUsingRw(true);
int BUS[4]={10,11,12,9}; //db4,db5,db6,db7
lcd.setDB(BUS);
lcd.init();