LCD 20x4 caratteri non visualizzati

Ciao, uso un display 20x4 con i2c montato, ha sempre funzionato ma adesso il led si accende ma non visualizza più alcun carattere.. la libreria che uso è la NewLiquidCristal 1.3.4 .. sapete se questo è un problema dell'i2c.. ho cercato di sostituirlo con un'altro montato su un display 16x02 ma con il solo saldatore non riesco a toglierlo.. avete dei consigli

non dovresti usare NewLiquidCrystal_I2C ?

cosa intendi?
devo usare altra libreria?
uso la 1.3.4 ed ha sempre funzionato

forse sbaglio io :smiley: mi pareva che ci fossero due versioni della libreria quella I2C e quella non...

per uno strano motivo il display quando si accende non visualizza nessun carattere, se invece apro il monitor seriale allora il display visualizza i caratteri solo quando sulla seriale viene visualizzato un dato... Da non credere...Bho!!

Un'informazione :

Devo collegare i GND di due arduino (NANO, MEGA) insieme perchè devono lavorare in associazione, ma visto che li alimento tutti e due con lo stesso alimentatore ho gia i GND in comune, quindi non bisogna collegarli o devo farlo ugualmente??
Grazie

Se posti lo sketch che usi, magari possiamo dirti qualcosa.
Non è che hai nel setup() la famosa while() sulla seriale che serve ... solo per la Leonardo ?

nid69ita:
Se posti lo sketch che usi, magari possiamo dirti qualcosa.
Non è che hai nel setup() la famosa while() sulla seriale che serve ... solo per la Leonardo ?

No, non ho nessuna while(), il display l'ho testato in due progetti diversi e ho sempre lo stesso problema.. fino a quando non apro la seriale il display resta vuoto...

Inserisco lo sketch anche se per me non centra nulla...

/* Questo progetto utilizza due Igrometri e un sensore DHT11 per gestire una Serra Automatica 
*/

int lettura = 0 ; // Pin analogico a cui è collegato il sensore 1
int lettura1 = A1 ; // sensore 2
int pompa = 9 ; //Pin a cui è collegato i rele' per attivare al pompa 
int hc12 = 11 ;
int sensorValue = 1008; // Valore del sensore 1 immerso in acqua
int sensorValue1 = 1014; // Valore del sensore 2 immerso in acqua
int sensPower1 = 5 ; // Pin Vcc IGROMETRO 1
int sensPower2 = 6 ; // Pin Vcc IGROMETRO 2

#include <HygrometerSensor.h>
#include <Adafruit_Sensor.h>

//DHT11 Sensor:
#include "DHT.h"
#define DHTPIN 12     // Sensore collegato al PIN 12
#define DHTTYPE DHT11   // DHT 11
DHT dht(DHTPIN, DHTTYPE);

//I2C LCD:
#include <Wire.h> // Libreria WIRE
#include <LiquidCrystal_I2C.h> // Libreria LCD I2C

// LCD I2C address
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); 


void setup()
{
  pinMode(sensPower1, OUTPUT); // Uscita Vcc Igrometro 1
  pinMode(sensPower2, OUTPUT); // Uscita Vcc Igrometro 2

   pinMode(pompa,OUTPUT); // Uscita relè pompa
    digitalWrite(pompa, HIGH); // Stato relè spento

    pinMode(hc12,OUTPUT);
    digitalWrite(hc12,HIGH); // HC-12 Trasmittente

// PIN 10 al relè - IN2
  pinMode(10, OUTPUT); // Uscita relè sensore DHT11
  digitalWrite(10,HIGH);

//I2C LCD
Serial.begin(9600);
  lcd.begin(20,4);
  Serial.println("Serra Automatica");
  
// Avvio sensore DHT11  
  dht.begin();
}

void loop(){
  
    // Accendo il sensore ON
    digitalWrite(sensPower1, HIGH);
    digitalWrite(sensPower2, HIGH); 
    delay(30); // Pausa calibrazione 
    
// Igrometro 1  
lettura = analogRead(A0);
sensorValue = map (lettura, 1008, 258, 0, 100); // converto il valore analogico in percentuale
Serial.print("Umidità terra 1 : ");
Serial.print(sensorValue);
Serial.println ("%"); //Stampa a schermo il valore  
    
// Igrometro 2    
lettura1 = analogRead(A1);
sensorValue1 = map (lettura1, 1014, 228, 0, 100); // converto il valore analogico in percentuale
Serial.print("Umidità terra 2 : ");
Serial.print(sensorValue1);
Serial.println ("%"); //Stampa a schermo il valore    
    
    if ((lettura >= 800) && (lettura1 >= 840)) 
     {
    digitalWrite (pompa,HIGH); //... attiva la pompa 
    digitalWrite (hc12,HIGH); // invio dati
        } else  {
  digitalWrite (pompa,LOW); //.... spegne la pompa
  digitalWrite (hc12,LOW); // nessun dato
        } 
    delay(10000);
    // Spengo il sensore
    digitalWrite(sensPower1, LOW);
    digitalWrite(sensPower2, LOW);
    delay(360000); // Attesa sensore OFF 60 minuti
    
  
// Lettura umidità e temperatura del sensore DHT11n
int h = dht.readHumidity();
int t = dht.readTemperature();

// Misura la temperatura e se maggiore di ... gradi attiva relè per accendere la ventola
if (t >= 25 )
   digitalWrite (10, LOW); // Attiva Relè 2
else
   digitalWrite (10, HIGH); // Spegni Relè 2
delay (2000);

  Serial.print("Temp: ");
  Serial.print(t);
  Serial.print("C, Umid: ");
  Serial.print(h);
  Serial.println("%");


// impostare cursore sulla prima riga:
lcd.setCursor(0, 0);
lcd.print("Temperatura: ");
lcd.print(t);
lcd.print("C");
  
// imposta cursore sulla seconda riga:
lcd.setCursor(0,1);
lcd.print("Umidita' Aria: ");
lcd.print(h);
lcd.print("%");

// imposta il cursore sulla terza riga:
lcd.setCursor(0,2);
lcd.print("Umid..Terra 1: ");
lcd.print(sensorValue);
lcd.print("%");
    

lcd.setCursor(0,3);
lcd.print("Umid..Terra 2: ");
lcd.print(sensorValue1);
lcd.print("%");
  
}

ne sei proprio sicuro? :slight_smile:

int sensPower1 = 5 ; // Pin Vcc IGROMETRO 1
int sensPower2 = 6 ; // Pin Vcc IGROMETRO 2

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

edit:
sono andato a controllare è la lib di malpartida, non si riferisce ai pin di arduino ma dell'lcd
quindi la dichiarazione è corretta...

non ho idea di cosa succeda ma quando apri il monitor seriale è come se facessi un reset su arduino e quindi ti scrive i valori sul monitor fino a quando arriva a questa riga

delay(360000); // Attesa sensore OFF 60 minuti

dopodichè tutto si ferma per un'ora e solo in seguito riceverai info sull'lcd

ma io uso i2c sul display, ho solo da collegare scl/sda... non è che usando l'i2c arduino mette quei pin (0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); in funzione, quindi non potrei usarli....

eppure ho provato a mettere il display in un altro progetto dove in quei pin non ho attaccato nulla e il problema era lo stesso

Patrick_M:
ne sei proprio sicuro? :slight_smile:

int sensPower1 = 5 ; // Pin Vcc IGROMETRO 1
int sensPower2 = 6 ; // Pin Vcc IGROMETRO 2

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

edit:
sono andato a controllare è la lib di malpartida, non si riferisce ai pin di arduino ma dell'lcd
quindi la dichiarazione è corretta...

Quei pin dovrebbero essere non i Pin di Arduino ma del I2C extender che sono collegati al interfaccia paralella del modulo LCD.
Ciao Uwe

Se usi la libreria di TESTATO non hai più nessun problema ed è molto più facile.
Avevo anche io tutti questi problemi che poi si ripresentavano ad ogni aggiornamento dell' IDE

#include <PCF8574_HD44780_I2C.h>
PCF8574_HD44780_I2C lcd(0x3F, 20, 4);

due righe che ti tolgono qualsiasi problema.

questa libreria l'avevo già testato/a e se non ricordo male avevo lo stesso problema.. cmq seguirò il tuo consiglio e vediamo come procede...Grazie

Ho inserito la libreria di Testato e per poco il display ha visualizzato i caratteri, dico per poco perché appena ho resettato Arduino sul display sono comparsi solo i quadrati e sul monitor seriale non visualizzavo più niente, il led RX che mi legge la lettura dei sensori rimaneva spento.
Non capendo il motivo ho caricato lo stesso sketch su altri due Arduino e ottenevo lo stesso problema...

Ho risolto togliendo la libreria di Testato sia dallo sketch che dalla cartella librerie di Arduino perché avevo sempre
lo stesso problema se non facevo così e ho rimesso quello di malpartida la 1.3.4, ora riesco a leggere la seriale,il led RX lampeggia ma x il display posso verificare domani.. Secondo me con la libreria di Testato mi va in conflitto con qualcosa...

Bho chi ci capisce è bravo

Ma hai provato solo il display o utilizzi sempre il tuo codice ?
Poi delay così lunghi non sono buoni su un codice come questo

Il display adesso funziona bene, ritengo che il problema erano proprio i delay, come dici tu troppo lunghi, usando i mills() il display funziona non appena viene acceso Arduino... Per la libreria ancora uso la newCrystal 1.3.4, ma non metto in dubbio che quella di Testato sia meglio...