Go Down

Topic: PANTALLA LCD CON I2C - SÍMBOLOS EXTRAÑOS (ARDUINO UNO) (Read 434 times) previous topic - next topic

DANWELL

May 03, 2017, 04:23 pm Last Edit: May 03, 2017, 11:55 pm by surbyte Reason: Imagenes sin etiquetas
Buenas, soy Rubén y os comento mi problema...

Empecé con Arduino hace relativamente poco, y probando el LCD con el I2C por defecto en la pantalla, subí este programa:

Code: [Select]

// Para la pantalla 16x2

//Librerias necesarias
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);



void setup()
{
  //Iniciamos el fondo retroiluminado
  lcd.backlight();
  //Iniciamos la pantalla
  lcd.init();
}


void loop()
{
  lcd.clear();//Limpiamos la LCD
  lcd.print("RUBEN");//Escribimos en la primera linea
  lcd.setCursor(0,1);//Saltamos a la segunda linea
  lcd.print("RUBEN");//Escribimos en la segunda linea
  
  //Tiempo de espera para que reinicie el ciclo
  delay(10000);
  
}


Al principio sólo salían las primeras letras, R en primera línea y R en la segunda, tenías que acercarte para verlo bien porque no estaba muy iluminado que digamos las letras.

SCL y SDA los tengo en los pines A5 y A4. (Estuve mirando en varios foros y algunos decían que SCL iba con A5, otros con A4... y no me aclaro)

En definitiva, en la imagen podéis ver lo que me salió en la pantalla, " _/ _/ " puede que no se aprecie mucho en la foto, la cámara de mi móvil...

Espero que alguien me pueda ayudar. La dirección del LCD es la que viene en el código. Y conectado los tengo con hembra hembra en la LCD y de cada extremo le puse macho macho y conecté a los pines. Tengo el kit básico de arduino y no tengo hembra macho, que triste.

Gracias por la atención!




Arduinito

Las fotografías están tan desenfocadas que por un segundo no sabía si tenía las gafas puestas... No se ve nada así.

Por lo general esos módulos la dirección I2C predeterminada es 0x20.
Se puede cambiar entre 0x20 y 0x27 según tengas soldados o no los pines A0 A1 A2 (aparecen escritos en el propio módulo) ¿Cómo lo tienes? No distingo bien.

Antes de ponerte a hacer pruebas en el loop, usa este ejemplo y este tutorial (hay muchos más en internet)
Ejemplo

Y por favor, no vuelvas a hacer doble post en diferentes secciones, te estaba respondiendo donde tocaba, en software y mientras respondía surbyte te cerró el hilo y tuve que ver donde habías puesto el otro. Es sentido común, no cuestión de normas, sólo has conseguido dar más trabajo a quienes te intentan ayudar.



zapata_h

#2
May 03, 2017, 11:15 pm Last Edit: May 03, 2017, 11:56 pm by surbyte Reason: Código sin etiqueta
Por que no sitúas el cursor antes de el primer texto?

Code: [Select]
lcd.clear();
lcd.print("RUBEN")


Debería quedar así no crees?

Code: [Select]
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("RUBEN");

Danicap

Hola DANWELL,

SCl va con SCL (pina A5) y SDA con SDA (pin A4). Revisa lo que te ha comentado Arduinito de la dirección, si no te aclaras con eso en internet hay ejemplos de I2CScanner que te sacarán la dirección de los equipos conectados.

Por último el que se vea con poca intensidad revisa si en tu LCD detrás hay un potenciómetro y gíralo que será el de contraste.

Un saludo!

Estebanquiable

#4
May 10, 2017, 08:27 am Last Edit: May 15, 2017, 10:10 pm by surbyte Reason: Códigos deben postearse con etiquetas.
Hola señor te indico como lo solucioné yo:

1- Borrá todas las librerias LCD de donde se instaló el programa y de mis documentos/Arduino/Library.
2-Poné en google descargar NewliquidCrystal Arduino library y descargala como zip.
3- Desde el Ide de Arduino Programa/incluir librería/Añadir librería ZIP elegis la que descargaste y esperas un ratito a que la agregue.
4-En internet hay un ejemplo de código que se llama I2C scan con este código descubris la dirección del Display 020, 027 a mi me funcionó la del código que te pongo más abajo.
5-Copiá y pegá este código:

Code: [Select]
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>

#define I2C_ADDR    0x3F// Dirección del puerto I2C del controlador del Display muy muy importante

LiquidCrystal_I2C             lcd(I2C_ADDR,2, 1, 0, 4, 5, 6, 7); // Patas de control del display
void setup()
  {
      lcd.begin (16,2);    // Inicializar el display con 16 caraceres 2 lineas
      lcd.setBacklightPin(3,POSITIVE);// seteo de pata del LED de Back light
      lcd.setBacklight(HIGH);// Prendo el LED de back light

        }
void loop()
  {
   lcd.setBacklight(HIGH);// Prendo el LED de back light
   lcd.clear(); //Limpio lcd
   lcd.print("****RUBEN*****");// Escribo RUBEN
   lcd.setCursor ( 0, 1 );        // 2da linea primer lugar
   lcd.print("FUNCIONO");
   delay(1000);
   lcd.setBacklight(LOW);// Apago el LED de back light
   delay(1000);
loop();
}


Saludos y espero que te funque!!!


carlangas_cl

Hola Estebanquiable

Sabes estoy haciendo pruebas con una pantalla LCD de 20x4 controlado por I2C, use tu código para probarlo pero al momento de compilarlo con el IDE v1.8.2 me da un error ya que no reconoce la libreria <LCD.h>, ¿que puede estar pasando?. Otra cosa, el LCD que conseguí viene con modulo I2C con un CHIP PCF8574AT, ¿servirá la nueva librería?






zapata_h

Hola carlangas_cl, lo primero que deberías de hacer es postear tu código completo y el mensaje de error, según explicas parece que no tengas la librería correcta en el lugar correcto, pero como te digo hasta que no veamos el código no te podemos ayudar.

carlangas_cl

#7
May 17, 2017, 10:52 pm Last Edit: May 18, 2017, 12:53 am by surbyte Reason: Usar etiquetas para postear códigos!!!
Hola zapata_h, te comento que use uno de los ejemplos que trae la librería para probar el LCD pero luego de cargarlo solo me muestra la letra "H", este es el código usado:


Code: [Select]
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F,20,4);

void setup()
{
 lcd.init();                      
 lcd.backlight();
 lcd.setCursor(0,0);
 lcd.print("Hello, world!");
}

void loop()
{
}




surbyte

carlangas_cl tanto cuesta usar etiquetas? No has visto ningun otro hilo en el foro acaso?

Ejecuten los ejemplos que corresponden a sus librerías.
Veo muchos comentarios de librerías completamente diferentes unas de otras.
Unas usan lcd.begin(20,4)
otras usan lcd.init()

Como ven no es lo mismo una cosa que la otra.

Con un LCD I2C primero hay que ubicar la dirección. Generalmente es 0x27.
Sean metódicos.
Yo tmb uso NewLiquidCrystal pero su instalación reemplaza la que tenemos por defecto con el IDE.
Hay que borrar LCD y LCD_I2C si es que estan porque NewLiquidCrystal controla todas las variantes.


Estebanquiable

Hola Ruben de nuevo, hace unos días que no entro al foro. El error puede deberse a que no hallas borrado todas las librerías LCD que vienen instaladas por defecto, en la compilación tendría que decirte que esta usando la librería New y no otra. Con respecto al I2C yo uso el mismo módulo y el tamaño de LCD se lo marcas vos en lcd.begin en tu caso sería (20,2).
Saludos.

DANWELL

Hola señor te indico como lo solucioné yo:

1- Borrá todas las librerias LCD de donde se instaló el programa y de mis documentos/Arduino/Library.
2-Poné en google descargar NewliquidCrystal Arduino library y descargala como zip.
3- Desde el Ide de Arduino Programa/incluir librería/Añadir librería ZIP elegis la que descargaste y esperas un ratito a que la agregue.
4-En internet hay un ejemplo de código que se llama I2C scan con este código descubris la dirección del Display 020, 027 a mi me funcionó la del código que te pongo más abajo.
5-Copiá y pegá este código:

Code: [Select]
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>

#define I2C_ADDR    0x3F// Dirección del puerto I2C del controlador del Display muy muy importante

LiquidCrystal_I2C             lcd(I2C_ADDR,2, 1, 0, 4, 5, 6, 7); // Patas de control del display
void setup()
  {
      lcd.begin (16,2);    // Inicializar el display con 16 caraceres 2 lineas
      lcd.setBacklightPin(3,POSITIVE);// seteo de pata del LED de Back light
      lcd.setBacklight(HIGH);// Prendo el LED de back light

        }
void loop()
  {
   lcd.setBacklight(HIGH);// Prendo el LED de back light
   lcd.clear(); //Limpio lcd
   lcd.print("****RUBEN*****");// Escribo RUBEN
   lcd.setCursor ( 0, 1 );        // 2da linea primer lugar
   lcd.print("FUNCIONO");
   delay(1000);
   lcd.setBacklight(LOW);// Apago el LED de back light
   delay(1000);
loop();
}


Saludos y espero que te funque!!!


TUVISTE LA SOLUCIÓN!

Go Up