Lcd Serial-IIC-I2C y mi mega

esta es la librería y dentro hay ejemplos

LiquidCrystal_I2C_funciona101.rar (6.41 KB)

Gracias por la libreria, he tenido problemas con el login, la probare en estos dias y te cuento, pero desde ya agradezco tu ayuda. Un saludo.

Hola, puedes probar con mi librería: https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/Home, en la sección de download puedes bajar la última versión.

Prueba con este código:

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

#define I2C_ADDR    0x3F  // Define I2C Address where the SainSmart LCD is
#define BACKLIGHT_PIN     3
#define En_pin  2
#define Rw_pin  1
#define Rs_pin  0
#define D4_pin  4
#define D5_pin  5
#define D6_pin  6
#define D7_pin  7

LiquidCrystal_I2C	lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);

void setup()
{
  lcd.begin (20,4);
  
  // Switch on the backlight
  lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
  lcd.setBacklight(HIGH);

  // Position cursor and write some text
  lcd.home ();                   // go to the first line, first character
  lcd.print("SainSmart I2C tester");  
  lcd.setCursor ( 0, 1 );        // go to the 2nd line
  lcd.print("It's Working!");
  lcd.setCursor ( 0, 2 );        // go to the third line
  lcd.print("Sainsmarts docs suck");
  lcd.setCursor ( 0, 3 );        // go to the fourth line
  lcd.print("Nice LCD Though. ");
}

void loop()
{

}

Por otro lado, como te comentan, necesitas conocer la dirección I2C del dispositivo, si no funciona cambia 0x3F por el valor que te de el siguiente programa:

// --------------------------------------
// i2c_scanner
//
// This program (or code that looks like it)
// can be found in many places.
// For example on the Arduino.cc forum.
// The original author is not know.
//
// This sketch tests the standard 7-bit addresses
// from 0 to 127. Devices with higher bit address
// might not be seen properly.
//
// Adapted to be as simple as possible by Arduino.cc user Krodal
//
// June 2012
// Using Arduino 1.0.1
//

#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 = 0; 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(8000);           // wait 8 seconds for next scan
}

Buena suerte.

Buenas Fm antes de nada darte las gracias por tomarte las molestias.

Prueba con la libreria del compañero Sergegsx el mismo resultado, ya he llegado a pensar que hay algo roto, pues no hace ni muestra nada mas que los cuadros (lo mismo que cuando se le da alimentacion y sin nada mas).

Despues lo del compañero fm: He bajado las librerias y leido como instalarlas (he tenido que quitar todo lo que tenia de pasados intentos, librerias y demas cosas) He paso el test y no me mostraba nada el monitor serial, pero cuando lo he mirado con el Hyperterminal me salia esto:
Scanning...
I2C device found at address 0x3F !
done

Raro verdad, segun el fabricante era 0x27 (pues NO y NO) despues he puesto el codigo primero de ejemplo y .... FUNCIONA .....

FM eres un mostro. Muchas gracias .

He comentado todo los pasos por si algun compañero pasa por el mismo tortuoso camino. Gracias a todos.

Un placer poder ayudar. Me alegra que te haya funcionado.

Lo que me fastidia de todo esto es que los fabricantes ni mantienen sus propios productos. Que pandilla, estos chinos!

+1 al karma por la ayuda fm! Llevaba tropecientas pruebas y me lo has resuelto en 1 post y 2 sketches... :grin:

Un +1000 por la libreria :slight_smile: Gracias por compartir.

Salu2 y buen Karma

+1 para ti tambien juanpintom. Un placer poder ayudar.

Muy buenas , estoy empazando con este tema y tengo el mismo problema que se describe en el post , pero no consigo solucionarlo.
Este es el error que me da al compilar vuestra solucion :

This report would have more information with
"Show verbose output during compilation"
enabled in File > Preferences.
Arduino: 1.0.5-r2 (Windows 7), Board: "Arduino Mega 2560 or Mega ADK"
LiquidCrystal_I2C\LiquidCrystal_I2C.cpp.o: In function LiquidCrystal_I2C::pulseEnable(unsigned char)': C:\Users\Dragun\Documents\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.cpp:247: multiple definition of LiquidCrystal_I2C::pulseEnable(unsigned char)'
LiquidCrystal\LiquidCrystal_I2C.cpp.o:C:\Users\Dragun\Documents\Arduino\libraries\LiquidCrystal/LiquidCrystal_I2C.cpp:287: first defined here
c:/arduino-1.0.5/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: Disabling relaxation: it will not work with multiple definitions
LiquidCrystal_I2C\LiquidCrystal_I2C.cpp.o: In function LiquidCrystal_I2C::send(unsigned char, unsigned char)': C:\Users\Dragun\Documents\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.cpp:229: multiple definition of LiquidCrystal_I2C::send(unsigned char, unsigned char)'
LiquidCrystal\LiquidCrystal_I2C.cpp.o:C:\Users\Dragun\Documents\Arduino\libraries\LiquidCrystal/LiquidCrystal_I2C.cpp:240: first defined here
LiquidCrystal_I2C\LiquidCrystal_I2C.cpp.o: In function LiquidCrystal_I2C::setBacklight(unsigned char)': C:\Users\Dragun\Documents\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.cpp:278: multiple definition of LiquidCrystal_I2C::setBacklight(unsigned char)'
LiquidCrystal\LiquidCrystal_I2C.cpp.o:C:\Users\Dragun\Documents\Arduino\libraries\LiquidCrystal/LiquidCrystal_I2C.cpp:167: first defined here
LiquidCrystal_I2C\LiquidCrystal_I2C.cpp.o: In function LiquidCrystal_I2C::begin(unsigned char, unsigned char, unsigned char)': C:\Users\Dragun\Documents\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.cpp:47: multiple definition of LiquidCrystal_I2C::begin(unsigned char, unsigned char, unsigned char)'
LiquidCrystal\LiquidCrystal_I2C.cpp.o:C:\Users\Dragun\Documents\Arduino\libraries\LiquidCrystal/LiquidCrystal_I2C.cpp:144: first defined here
LiquidCrystal_I2C\LiquidCrystal_I2C.cpp.o: In function LiquidCrystal_I2C::init()': C:\Users\Dragun\Documents\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.cpp:36: multiple definition of LiquidCrystal_I2C::init()'
LiquidCrystal\LiquidCrystal_I2C.cpp.o:C:\Users\Dragun\Documents\Arduino\libraries\LiquidCrystal/LiquidCrystal_I2C.cpp:194: first defined here

Muchas gracias de antemano

Simplemente borra la librería LiquidCrystal que viene en el entorno Arduino y pon es su lugar la New LiquidCrystal. Si tienes cualquier otra librería para controlar un LCD también deberías borrarla.

La New LiquidCrystal es un súper conjunto de estas librerías y mucho mas rápida.

Por ultimo, lee el manual de la wiki de la librería.

Un saludo,

fm

Por ejemplo, borra también la LiquidCrystal_I2C como librería que veo que tienes instalada.

Lo primero gracias por la rapidez en contestar .

He borrado las bibliotecas de LiquidCrystal y las que se parecian , la de _I2c y la de _Fast y puesto en su lugar la que me decias "New LiquidCrystal" .

E cargado el codigo que hay mas arriba

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

#define I2C_ADDR    0x3F  // Define I2C Address where the SainSmart LCD is
#define BACKLIGHT_PIN     3
#define En_pin  2
#define Rw_pin  1
#define Rs_pin  0
#define D4_pin  4
#define D5_pin  5
#define D6_pin  6
#define D7_pin  7

LiquidCrystal_I2C	lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);

void setup()
{
  lcd.begin (20,4);
  
  // Switch on the backlight
  lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
  lcd.setBacklight(HIGH);

  // Position cursor and write some text
  lcd.home ();                   // go to the first line, first character
  lcd.print("SainSmart I2C tester");  
  lcd.setCursor ( 0, 1 );        // go to the 2nd line
  lcd.print("It's Working!");
  lcd.setCursor ( 0, 2 );        // go to the third line
  lcd.print("Sainsmarts docs suck");
  lcd.setCursor ( 0, 3 );        // go to the fourth line
  lcd.print("Nice LCD Though. ");
}

void loop()
{

}

Ya no tengo errores pero no me hace nada el LCD mas que estar encendido

Ahora tendrás que configurar los pones a los que esta conectado la mochila al LCD y la mochila al arduino. Si es con i2c pues a scl y sda.

Uff, soy el mas novato del mundo, me podias como defino esas entradas? Estoy usando una mega .Por lo menos que vea el hola mundo seria un gran avance para mi.

------- SOLUCIONADO ----------

Lo primero dar las gracias por lo que me habeis ayudado y lo que habeis escho que haga y consiga ...

Voy explicar los pasos por partes ..

1.- Instalacion nueva del IDE , ya que tenia un lio de bibliotecas de la leche.

  1. Actualizado la libreria de LiquidCrystal de origen del IDE de 1.05 R2 por la de LiquidCrystal_V1.2.1 descargada desde aqui https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads

  2. He confirmado el puerto por que el trabaja mi I2C el 0x27 y no el 0x3F , y lo e cambiado por "#define I2C_ADDR 0x27" en el scketch , Para aprender a usar el scanner e encontrado esto Arduino Playground - I2cScanner .Tambien he cambiado tipo de LCD que uso yo en la linea de " lcd.begin (16,2);" .

El scketh a quedado asi:

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

#define I2C_ADDR    0x27  // Define I2C Address where the SainSmart LCD is
#define BACKLIGHT_PIN     3
#define En_pin  2
#define Rw_pin  1
#define Rs_pin  0
#define D4_pin  4
#define D5_pin  5
#define D6_pin  6
#define D7_pin  7

LiquidCrystal_I2C	lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);

void setup()
{
  lcd.begin (16,2);
  
  // Switch on the backlight
  lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
  lcd.setBacklight(HIGH);

  // Position cursor and write some text
  lcd.home ();                   // go to the first line, first character
  lcd.print("SainSmart I2C tester");  
  lcd.setCursor ( 0, 1 );        // go to the 2nd line
  lcd.print("It's Working!");
  lcd.setCursor ( 0, 2 );        // go to the third line
  lcd.print("Sainsmarts docs suck");
  lcd.setCursor ( 0, 3 );        // go to the fourth line
  lcd.print("Nice LCD Though. ");
}

void loop()
{

}

Y todo funcionando . Muchas gracias por la ayuda y por las pistas que han echo que me ponga a buscar y probar , y el resultado a sido un lujo .

Lo dicho muchas gracias a todos.

Perfecto y buen trabajo!

Un saludo

fm:
Perfecto y buen trabajo!

Un saludo

Ahora toca buscar alguna practica, del tipo, como hacer q aparezca en lcd el tiempo que lleva encendido el lcd o algo asi.Alguna referencia de algun blog o web?
Gracias a ti FM por tu paciencia, como poco te has ganado un punto de karma , otra vez gracias

+Dragun, pues no sabría decirte. Puedes inventarte un proyecto para el LCD. No se, algo que te mida la temperatura y te de el tiempo que lleva encendido.

Me funciono con probar modificando este valor LiquidCrystal_I2C lcd(0x27, 16, 2); por este LiquidCrystal_I2C lcd(0x3F, 16, 2); y también con insertar esto en el código
void setup() {
Wire.begin();

El hilo es del 2012.
No revivas hilos viejos!!
Hilo cerrado.
Lee las normas del foro y luego crea tu consulta en la sección adecuada siguiendo las pautas indicadas en las normas. Si no te queda claro, lee otros hilos y verás como se postean códigos, enlaces e imágenes.