come far funzionare un lcd in I2C con arduino [RISOLTO]

Ciao a tutti,
vorrei far funzionare, come da titolo, un lcd 16x02 con il modulo I2C.
Eseguendo lo sketch d'esempio della libreria LiquidCrystal_I2C il display stampa sempre e solo la prima lettera nella riga 1.

questo lo sketch:

//DT Studio
//Compatible with the Arduino IDE 1.0
//Library version:1.1
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display

void setup()
{
  lcd.init(); // initialize the lcd 
  // Print a message to the LCD.
  lcd.backlight();
  lcd.print("Hello,DT Studio!");
}
void loop()
{
}

Quindi, con questa stringa:

lcd.print("Hello,DT Studio!");

in realtà mi stampa solo la prima lettera, ovvero 'H'.

Come posso risolvere?
Grazie.

Facendo una ricerca sul forum ... visto che se ne è parlato decine e decine di volte ... :smiley:
... è un buco nella libreria (probabilmente vecchia) e basta un piccola correzione.

Guglielmo

Ok, ho risolto il problema con questo sketch:

//DT Studio
//Compatible with the Arduino IDE 1.0
//Library version:1.1
#include <Wire.h> 
#include <LCD.h>
#include <LiquidCrystal_I2C.h>


LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7);  // set the LCD address to 0x27 for a 16 chars and 2 line display

void setup()
{
  lcd.begin(16,2);                      // initialize the lcd 
 
  // Print a message to the LCD.
  lcd.setBacklightPin(3,POSITIVE);
  lcd.print("Hello,DT Studio!");
  lcd.setBacklight(HIGH);
  lcd.home();
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("123456789101112");
  lcd.setCursor(0,1);
  lcd.print("@12345678912989");
}

void loop()
{
}

il problema adesso è che non mi si accende la retroilluminazione...leggevo da qualche parte che il pin 3 è quello sulla retroilluminazione..come posso risolvere?

Il pin 3 è per il contrasto, per la retroilluminazione
devi usare il 15 e 16 e vedere se ci vuole una resistenza in serie.

Il pin 3 è per il contrasto, per la retroilluminazione
devi usare il 15 e 16 e vedere se ci vuole una resistenza in serie.

il pin 3 è riferito all'Arduino e viene utilizzato per accendere la retroilluminazione.
Devi collegare il pin 3 ad un transistor, tramite un'apposita resistenza di base e una resistenza in serie al led, per poter accendere la retroilluminazione del display altrimenti potresti bruciare l'arduino.
Ciao

Gianky00:
il problema adesso è che non mi si accende la retroilluminazione...leggevo da qualche parte che il pin 3 è quello sulla retroilluminazione..come posso risolvere?

Eh? Pin per la retroilluminazione? Scusa ma il tuo display non è I2C?
E poi anche la sintassi del costruttore è come se fosse la normale LiquidCrystal ossia per i display senza I2C:

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

Per me è:
LiquidCrystal_I2C lcd(0x27,16,2);

Insomma, se hai un display I2C devi usare la libreria per I2C, quale usi esattamente (autore e versione)?

Fammi capire...

doc doc eccomi, il fatto che non funzionava la retroilluminazione era dovuta a un falso contatto.
Poi se uso la stringa:

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

oppure quella da te citata:

LiquidCrystal_I2C lcd(0x27,16,2);

Ho notato che non cambia nulla...per abilitare la retroilluminazione utilizzo:

lcd.setBacklightPin(3,POSITIVE); //Per settare il pin di retroilluminazione
lcd.setBacklight(HIGH); //per accendere retroilluminazione
lcd.setBacklight(LOW); //per spegnere retroilluminazione

Grazie mille a tutti, aggiorno il titolo come problema risolto :slight_smile: