RISOLTOVerifica e Compilazione OK ...ma...

Buongiorno

volevo chiedere consiglio a proposito di un problema che non riesco a capire.

Spulciando dei tutorial per scrivere su lcd 20x4 ho trovato uno che faceva uso di un lcd senza I2C.

Ho cercato di modificarlo per il mio lcd I2C e ho ricompilato lo sketch .

Il problema che incontro è che la verifica dello sketch è OK e anche il caricamento risulta OK:Caricamento completato ma nulla appare sul display.

Questo problema mi succede anche per altri progetti e non so come risolvere visto che non risultano errori nella “parte rossa” dello sketch.

Immagino,conoscendomi, che le istruzioni del mio sketch saranno completamente sbagliate,ma comunque gradirei sapere perché :verifica ok,caricamento ok e poi nulla per poter riparare agli errori.

 #include <LiquidCrystal_I2C.h>

#include <Wire.h>

LiquidCrystal_I2C lcd(0x27,20,4);
void setup()
{
  lcd.begin(20,4);
  lcd.clear();
  lcd.cursor() ;
 delay (2000);
  lcd.noCursor();
}
void loop()
{
  lcd. home();
  lcd.print("xxxxx");
  delay(500); 
  lcd.setCursor(0,0);
  lcd.print("xxxxxxx");
  lcd.setCursor(0,1);
  lcd.print("xxxxxxx");
  lcd.setCursor(0,2);
  lcd.print("xxxxxxxx");
  lcd.setCursor(0,3);
  lcd.print("xxxxxxx");
  lcd.setCursor(0,4);
  lcd.print("xxxxxx");
  delay(500);
}

Grazie

Direi di si, qualche comando è errato.
Non ricordo ora a memoria la libreria ma di sicuro non ci sono due istruzioni a cui dai le stesse informazioni 20x4:

LiquidCrystal_I2C lcd(0x27,20,4);
...
lcd.begin(20,4);

Esistono almeno 2 versioni della Liquid_I2C, una che vuole la dichiarazione e poi la lcd.begin() e un'altra che vuole la dichiarazione e poi la lcd.init(). Normalmente nei tuoi programmi funzionanti cosa dai come istruzioni lcd ?

Grazie per avermi risposto così presto.

Per quanto riguarda la librerie uso quella che ho trovato su Gestione librerie:LiquidCrystalI2C by Frank de Brabanden.

Le istruzioni di solito lcd.begin(16,2);e lcd.print.("XXXXX");

Quindi di solito metti
LiquidCrystal_I2C lcd(0x27);
e poi nella setup()
lcd.begin(20,4);

E' corretto ? Se si, allora prova a togliere semplicemente 20,4 dalla LiquidCrystal_I2C lcd(0x27~~,20,4~~);
Quei parametri successivi sono opzionali ma se li metti dicono quali pin e come sono collegati tra il chip che pilota il modulino I2C e i pin del lcd

Ho provato a togliere il 20,4 ma alla verifica mi dà questo messaggio:

no matching function for call to LiquidCrysta_I2C...LiquidCrystalI2C(int)

Prova allora
LiquidCrystal_I2C lcd(0x27,20,4);
...
lcd.init() ; //nel setup questa

l’avevo già provata ma non va mi dà ugualmente lo stesso avviso.
DEve esserci qualche altro errore nella scrittura dello sketch che non riesco a capire!

Ma un altro sketch che usi e ti funziona per il tuo lcd lo hai ?

purtroppo ho sketch solo per un16x2 _ma con una struttura completamente diversa,con array 1 e 2,

con lo scroll _che funziona anche sul 20x4(naturalmente su due righe) e anzi quando lo accendo si

illuminano tutti i “quadratini” mentre con lo sketch di cui sopra si illuminano solo due file.

Comunque proverò con questo che avevo scaricato e lo cambierò per un 20x4.
Capire perchè il " mio" non funziona non ci riuscirò mai!

Grazie

// include the library code
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
/**********************************************************/
char array1[]="  xxxxxxxxxx           "; //the string to print on the LCD
char array2[]="    xxxxxxxxx          "; //the string to print on the LCD
int tim = 500; //the value of delay time
// initialize the library with the numbers of the interface pins
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
  lcd.backlight(); //open the backlight 
}
/*********************************************************/
void loop() 
{
  lcd.setCursor(15,0); // set the cursor to column 15, line 0
  for (int positionCounter1 = 0; positionCounter1 < 26; positionCounter1++)
  {
    lcd.scrollDisplayLeft(); //Scrolls the contents of the display one space to the left.
    lcd.print(array1[positionCounter1]); // Print a message to the LCD.
    delay(tim); //wait for 250 microseconds
  }
  lcd.clear(); //Clears the LCD screen and positions the cursor in the upper-left  corner.
  lcd.setCursor(15,1); // set the cursor to column 15, line 1
  for (int positionCounter = 0; positionCounter < 26; positionCounter++)
  {
    lcd.scrollDisplayLeft(); //Scrolls the contents of the display one space to the left.
    lcd.print(array2[positionCounter]); // Print a message to the LCD.
    delay(tim); //wait for 250 microseconds
  }
  lcd.clear(); //Clears the LCD screen and positions the cursor in the upper-left corner.
}

Questo è lo sketch che funziona anche sul 20x4

La butto li…
hai trovato l’indirizzo del display?
Io mettevo 0x27 e non funzionava, poi ho usato I2C scanner e ho trovato
che il mio lcd ha come indirizzo 0x3F

lo trovi quì

Su quest'ultima fai

void setup()
{
  lcd.init(); //initialize the lcd
  lcd.backlight(); //open the backlight
}

quindi la init senza parametri e la backlight che nell'altro non mi pare ci sia, per cui forse ti resta spenta la retroilluminazione.

La libreria mi pare la stessa.

karafasta:
l’avevo già provata ma non va mi dà ugualmente lo stesso avviso.
DEve esserci qualche altro errore nella scrittura dello sketch che non riesco a capire!

Nello sketch che ti funziona usi init e non begin. Poi come dice maubarzi usi anche backlight. Fai lo stesso nel nuovo programma

Salve.
Ho testato con I2C scanner e l'indirizzo è proprio 0X27.
Ho provato anche con init e baklight ma senza risultati.
Naturalmente ci riferiamo al primo sketch che ho postato no?

Vi ringrazio per l'interessamento.

Ho ricontrollato e messo init e backlight FUNZIONA

Grazie tante!
Metto risolto :slight_smile:

Ottimo.