Arduino + LiquidCrystal

Salve a tutti ragazzi ho un problema con un mini progettino Arduino + LiquidCrystal.

Avevo scritto questo codice tempo fa e ricordo bene che funzionava anche se con qualche problemino di refresh dei caratteri sul display LCD adesso però non riesco a vedere assolutamente nulla sul mio LCD. Mi sapreste aiutare ?

#include <LiquidCrystal_I2C.h>
#include <ESP8266WiFi.h>
#include <Wire.h> 
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);


void setup() {
  Serial.begin(115200);
  lcd.begin (16,2); // for 16 x 2 LCD module
  lcd.clear();
  lcd.setBacklightPin(3,POSITIVE);
  lcd.setBacklight(LOW);
  
  lcd.home ();  // go home
  lcd.print("Hello World !!! ");  
  lcd.setCursor ( 0, 1 );        // go to the next line
  lcd.print ("I2C Address 0x27");    

 
}

void loop(){
   ---
}

A video non ho alcun errore in face di compilazione purtroppo non reisco in nessun modo a far scrivere più nulla su questo monitorino.

mi potreste aiutare?

Prima devi accendere il display solo con il GND e il +5 volt e vedere se appaiono dei quadratini neri. Se appaiono allora puoi proseguire altrimenti devi regolare il contrasto in modo da vederli.

Poi sei sicuro dell'indirizzo? Altrimenti usa uno dei tanti I2C scanner che trovi in internet.

Inoltre ti consiglio di utilizzare una libreria più semplice e priva di problemi come QUESTA.

Con questa libreria basta solo scrivere queste istruzioni:

#include <PCF8574_HD44780_I2C.h>

PCF8574_HD44780_I2C lcd(0x27, 16, 2);

e poi il solito lcd.init (); nel setup

Io ho sempre usato la LiquidCrystal_I2C senza problemi, quindi o si tratta di un indirizzo (hai cambiato display nel frattempo?) oppure può anche trattarsi di un conflitto o di una versione della LiquidCrystal_I2C che non è adatta (ci sono varie versioni che si chiamano esattamente allo stesso modo..): verifica quale libreria LiquidCrystal_I2C hai esattamente, e se per caso ne hai più di una.

docdoc:
Io ho sempre usato la LiquidCrystal_I2C senza problemi,
.....

Anche io non ne avevo. Poi ho cominciato ad averne ed ho scoperto che cominciano ad esserci troppe librerie che si chiamano con lo stesso nome (la fantasia non è dei programmatori, forse).
Con quella che uso adesso dubito che ce ne sia un'altra con lo stesso nome.
Poi con LDC I2C non trovo l'utilità di dichiarare i pin nella LiquidCrystal...

steve-cr:
Anche io non ne avevo. Poi ho cominciato ad averne ed ho scoperto che cominciano ad esserci troppe librerie che si chiamano con lo stesso nome (la fantasia non è dei programmatori, forse).

Più che altro sono "evoluzioni" della stessa, per quanto ho visto. Io ho usato sempre quella di marcoschwartz, che ora mi reindirizza su QUESTA.

Con quella che uso adesso dubito che ce ne sia un'altra con lo stesso nome.

Sicuro.. :slight_smile:

Poi con LDC I2C non trovo l'utilità di dichiarare i pin nella LiquidCrystal...

Se è I2C neanche con quella che uso io.
Il suo problema però è che, appunto, usa la sintassi della LiquidCrystal.h che è la versione non I2C:

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

Secondo me gli basta usare:

LiquidCrystal_I2C lcd(0x27, 16,2);

come in quella che consigliavi tu.

Allora sicuramente è come dite voi difatto questo progettino lo avevo scritto conil mio vecchio pc. QUando ho ripreso il progetto sul pc nuovo, la libreria LiquiCrystal non c'era più e ne ho scaricatp un altra, è sicuramente cosi avrò utilizzato sicuramente una libreria diversa.

Adesso ho utilizzato la libreria linkata da @steve_cr

ed ho scritto questo codice:

#include <PCF8574_HD44780_I2C.h>
PCF8574_HD44780_I2C lcd(0x27, 16, 2);

void setup() {
  Serial.begin(115200);
  lcd.init();           // LCD Initialization              
  lcd.backlight();      // Backlight ON
  lcd.clear();          // Clear the display
  
  lcd.setCursor(0,0);   // Set the cursor to col 0, row 0
  lcd.print("INIZIALIZZAZIONE");   // Print the first word
  lcd.setCursor(0,1);   // Set the cursor to col 0, row 1
  lcd.print("DOM.");  // Print the second word
  delay(500);

//  altro codice

lcd.clear();          // Clear the display
  lcd.home();
  lcd.setCursor(0,0);   // Set the cursor to col 0, row 0
  lcd.print("Wifi Ready");   // Print the first word
  delay(500);
}

void loop(){
   lcd.clear();
  delay(500);
  lcd.setCursor(0,0);  lcd.print("Cursor");  
  lcd.setCursor(0,1);  lcd.print("Control");  
  
  
}
[/code/]

All avvio, vedo il display illuminato tutti i quadratini, purtroppo non riesco a vedere alcuna stringa scritta sul display  >:(  >:(  >:(  >:(  >:(

purtroppo riesco a vedere solo le prime stringhe sul monitor. (Inizializzazione e DOM), poi più nulla, come mai?

Intanto leva quel "lcd.print("pippo")" da dentro al loop, perché se scrivi alla velocità del ciclo loop() l'LCD non ce la fa a starti appresso.
Una volta che lo avrai fatto, dicci cosa vedi.

PS hai messo una barra di troppo per chiudere il codice /code/ tra le quadre, la tua ultima frase finisce dentro al codice...

Praticamente nel loop vai a dire di pulire lo schermo, aspetti MEZZO secondo e poi scrivi due righ e cioè Cursor e Control, però il programma ricomincia dall'inizio (inizio del loop, perché il setup lo fa una sola volta) quindi pulisce ancora lo schermo....

Praticamente NON PUOI VEDERE NIENTE, perché nel momento che scrivi le due righe il programma ricomincia di nuovo e cancella tutto!

bircastri:
purtroppo riesco a vedere solo le prime stringhe sul monitor. (Inizializzazione e DOM), poi più nulla, come mai?

Che fai, bari? Mi cambi il codice del loop() così? :slight_smile:
Comunque è come dice anche steve-cr, non puoi fare quelle scritture continue, l'LCD non può stare appresso alle scritture e soprattutto nel codice che hai modificato sposta il delay del loop dopo le lcd.print() e lo metti più lungo (diciamo 1000 ossia 1 secondo). Inoltre se cancelli e scrivi sempre la stessa cosa non è che serva a molto, prova questo:

#include <PCF8574_HD44780_I2C.h>
PCF8574_HD44780_I2C lcd(0x27, 16, 2);

void setup() {
  Serial.begin(115200);
  lcd.init();           // LCD Initialization              
  lcd.backlight();      // Backlight ON
  lcd.clear();          // Clear the display
  
  lcd.setCursor(0,0);   // Set the cursor to col 0, row 0
  lcd.print("INIZIALIZZAZIONE");   // Print the first word
  lcd.setCursor(0,1);   // Set the cursor to col 0, row 1
  lcd.print("DOM.");  // Print the second word
  delay(500);

  lcd.clear();          // Clear the display
  lcd.home();
  lcd.setCursor(0,0);   // Set the cursor to col 0, row 0
  lcd.print("Wifi Ready");   // Print the first word
  delay(1000);
}

int conta = 0;

void loop(){
  lcd.clear();
  lcd.setCursor(0,0);  lcd.print("Cursor");  
  lcd.setCursor(0,1);  lcd.print(conta++);  
  delay(1000);
}

PS hai ancora il tag "sporco", togli quella linea [/code/] lascia solo la "/code" di chiusura

Allora sono riuscito a capire il problema, in pratica nel SETUP andavo a settare dei PIN con stato OUTPUT. Quindi dopo aver fatto questo setup giustamente l arduino non poteva utilizzare più questi PIN correttamente ed il display non segnava più niente.

cmq grazie per le dritte