Problema con LCD

Ciao a tutti ho acquistato un LCD 20 carattari 4 righe, l’LCD ha già montata a bordo la scheda YwRobot LCM1602IIC, l’ho collegato al mio Arduino Leonardo e volevo fare qualche prova ma ho riscontrato delle cose un po strane:

  1. Quando lo collego tutta la prima e la terza riga si presentano completamente illuminate mentre la seconda e la quarta spente, è normale?

  2. Cercando in rete ho scaricato la libreria e degli esempi ed ho provato a testarli semplificandoli al massimo scrivendo ad esempio una sola riga per iniziare, l’esempio è questo:

// *************************************************************
// IMPOSTAZIONI PER IL DISPLAY LCD
// *************************************************************
#include <Wire.h>  // Libreria di sistema - E' richiesta da I2CIO.cpp
#include <LiquidCrystal_I2C.h> // Libreria LCD I2C
// Imposta i pin usati sul chip I2C per le connessioni 
// con il display LCD: addr, en, rw ,rs ,d4 ,d5 ,d6 ,d7 ,bl ,blpol
// ed inoltre pone l'indirizzo del display a 0x27
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

// -------------------------------------------------------------
// PROGRAMMA VERO E PROPRIO
// -------------------------------------------------------------

void PulisciRigaPassword()
{
    lcd.setCursor(0, 1);               // 1° colonna - 2° riga
    lcd.print("                    "); // Pulisce la riga
    lcd.setCursor(0, 1);               // 1° colonna - 2° riga
    lcd.print("-> ");                  // e prosegue sulla stessa riga
}

void setup()
{
  // Devo inizializzare il display LCD 20 caratteri per 4 linee
  lcd.begin(20, 4); 
  // Pulisce l'LCD e pone il cursore all'inizio
  lcd.clear(); 
  lcd.print("HALLO WORLD:");
}

void loop()
{

}

Quando tento di caricare mi da questo messaggio di errore:
“testlcd2.ino:12:53: error: ‘POSITIVE’ was not declared in this scope”

Cercando poi ho trovato altri esempi ma non erano per lcd 20x4

Avendo un Leonardo ho provato a collegare l’LCD sia ai pin SCL/SDA sia come da schema indicato su A4/A5

Qualcuno mi sa dare qualche dritta?
Grazie

Sono l'ultima persona che dovrebbe risponderti ma …se non erro l'errore che ti da è causato dalla inizializzazione del display LCD, in cui dovresti settare i pin che intendi usare per il collegamento…

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

..in particolare "POSITIVE" non è un pin……per dare un "nome" ai pin, dovresti prima dichiarali, prima del setup con, ad esempio:

define POSITIVE 9 //colleghi virtualmente il pin 9 alla parola POSITIVE

Se ho detto cavolate vi prego di correggermi. Grazie

La libreria richiede in quella posizione POSITIVE o NEGATIVE e non fa riferimento ad un pin. Mi pare si riferisca alla polarità del contrasto, ma non ricordo bene. Di sicuro non si riferisce ad un pin.

perfetto…prima risposta…prima cavolaia…perdonatemi :o

in effetti si riferisce alla polarità del contrasto ma quando compilo me lo segnala come errore addirittura nel dubbio avevo anche provato a scrivere true e false ma non ha funzionato

La libreria LiquidCrystal è fornita con l'IDE La libreria LiquidCrystal_I2C no. Da dove l'hai scaricata ? Quale versione IDE usi ?

beltin: perfetto…prima risposta…prima cavolaia…perdonatemi :o

Don't worry :)

la libreria l'ho trovata qui http://hmario.home.xs4all.nl/arduino/LiquidCrystal_I2C/ l'ide è 1.6.2

Mi pare una versione vecchia. Prova qui: https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/Home

Ok ho scaricato la libreria dal tuo link ed ora funge grazzieeeeeeeeeeeeeeeeeeeeeeeeeeee ora iniziano i test

Prego :)

Ciao a tutti, torno a scrivere su questo mio post perchè l'argomento è sempre relativo a problemi con la comunicazione col mio lcd.

Grazie ai suggerimenti di nid69ita sono riuscito a scaricare ed installare la corretta libreria per comunicare con l'lcd.

Scopiazzando da esempi trovati in rete quando inizializzo l'lcd uso questo comando:

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

e funziona ma avendo un lcd con scheda LCM1602 uso i pin SDA e SCL purtroppo però inizializzando in questo modo non posso più usare i pin dallo 0 al 7, come devo configurare l'lcd per comunicare con SDA, SCL potendo comunque usare gli altri pin?

I pin di riferimento sono quello della schedina I2C non quelli di Arduino. Oltre a SDA e SCL non ocupi pin su Arduino. Ciao Uwe

Capisco, ma se inizializzo l’lcd come sopra descritto e non uso i pin da 0 a 7 quando stampo sul lcd vedo le scritte mentre se inizializzo anche i pin come output e durante lo sketch li uso quando stampo sull lcd non vedo il testo stampato, faccio un paio di esempi:

così:

//Librerie e inizializzazione LCD *****************************
#include <Wire.h>  // Libreria di sistema - E' richiesta da I2CIO.cpp
#include <LiquidCrystal_I2C.h> // Libreria LCD I2C
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
//*************************************************************

void setup(){

  Serial.begin(9600); //Inizializzazione seriale

  lcd.begin(20, 4);        //Devo inizializzare il display LCD 20 caratteri per 4 linee
  lcd.clear();             //pulisce lo schermo

/*  pinMode (0, OUTPUT);
  pinMode (1, OUTPUT);
  pinMode (2, OUTPUT);
  pinMode (3, OUTPUT);
  pinMode (4, OUTPUT);
  pinMode (5, OUTPUT);
  pinMode (6, OUTPUT);
  pinMode (7, OUTPUT);
*/

}//End setup

void loop(){


/*    digitalWrite(0, HIGH);
    digitalWrite(1, HIGH);
    digitalWrite(2, HIGH);
    digitalWrite(3, HIGH);
    digitalWrite(4, HIGH);
    digitalWrite(5, HIGH);
    digitalWrite(6, HIGH);
    digitalWrite(7, HIGH);

delay(200);

    digitalWrite(0, LOW);
    digitalWrite(1, LOW);
    digitalWrite(2, LOW);
    digitalWrite(3, LOW);
    digitalWrite(4, LOW);
    digitalWrite(5, LOW);
    digitalWrite(6, LOW);
    digitalWrite(7, LOW);

delay(200);
*/
    lcd.setCursor(0,1);
    lcd.print("    Test lcd"); 
    delay(1000);

}

visualizzo la scritta “Test lcd” sul display

così:

//Librerie e inizializzazione LCD *****************************
#include <Wire.h>  // Libreria di sistema - E' richiesta da I2CIO.cpp
#include <LiquidCrystal_I2C.h> // Libreria LCD I2C
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
//*************************************************************

void setup(){

  Serial.begin(9600); //Inizializzazione seriale

  lcd.begin(20, 4);        //Devo inizializzare il display LCD 20 caratteri per 4 linee
  lcd.clear();             //pulisce lo schermo

  pinMode (0, OUTPUT);
  pinMode (1, OUTPUT);
  pinMode (2, OUTPUT);
  pinMode (3, OUTPUT);
  pinMode (4, OUTPUT);
  pinMode (5, OUTPUT);
  pinMode (6, OUTPUT);
  pinMode (7, OUTPUT);


}//End setup

void loop(){


    digitalWrite(0, HIGH);
    digitalWrite(1, HIGH);
    digitalWrite(2, HIGH);
    digitalWrite(3, HIGH);
    digitalWrite(4, HIGH);
    digitalWrite(5, HIGH);
    digitalWrite(6, HIGH);
    digitalWrite(7, HIGH);

delay(200);

    digitalWrite(0, LOW);
    digitalWrite(1, LOW);
    digitalWrite(2, LOW);
    digitalWrite(3, LOW);
    digitalWrite(4, LOW);
    digitalWrite(5, LOW);
    digitalWrite(6, LOW);
    digitalWrite(7, LOW);

delay(200);

    lcd.setCursor(0,1);
    lcd.print("    Test lcd"); 
    delay(1000);

}

sl display non visualizzo nulla

NON puoi usare i pin 0 e 1 di Arduino, sono in pratica TX e RX della seriale/usb

Prova anche a leggere questo thread, suggeriscono un'altra libreria http://forum.arduino.cc/index.php?topic=336680.0

Si ho letto, quella libreria trattata in quel thread è quella che stavo usando io inizialmente poi ho scaricato quella che mi hai indicato tu e funziona