Menù con 3 pulsanti (su, giù, seleziona) su schermo lcd I2C

Salve a tutti, sono uno studente di 17 anni, le conoscenze che ho in campo di programmazione sono molto limitate, ho svolto alcuni corsi presso la mia scuola per quanto riguarda l'uso a grandi linee di c++; vorrei chiedervi una mano per risolvere un problema, nel codice che ho scritto non riesco a trovare soluzione ad un errore derivante penso dalla libreria che sto utilizzando.


#include <LiquidCrystal_I2C.h>
#include <Wire.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);

int subottone = 3;
int giubottone = 2;
int selbottone = 4;
int menu = 1;

void setup() {

  lcd.begin();
  lcd.backlight();
  pinMode(subottone, INPUT_PULLUP);
  pinMode(giubottone, INPUT_PULLUP);
  pinMode(selbottone, INPUT_PULLUP);
  updateMenu();

}

void loop() {
  if (!digitalRead(giubottone)) {
    menu++;
    updateMenu();
    delay(100);
    if (!digitalRead(giubottone));
  }
  if (!digitalRead(subottone)) {
    menu--;
    updateMenu();
    delay(100);
    if (!digitalRead(subottone));
  }
}

void updateMenu() {
  switch (menu) {
    case 0;
      menu = 1;
      break;
    case 1;
      lcd.clear();
      lcd.print(" > lvl. acqua");
      lcd.setCursor(0, 1);
      lcd.print("   Umidita'");
      break;
    case 2;
      lcd.clear();
      lcd.print("   lvl. acqua");
      lcd.setCursor(0, 1);
      lcd.print(" > Umidita'");
      break;
  }
}
}

Provando a verificarlo, ricevo questo messaggio di errore, riferito al primo lcd.begin;
“no matching function for call to 'LiquidCrystal_I2C::begin()“.
Spero possiate aiutarmi e riconfermo i miei ringraziamenti

Nadali Leonardo

Buongiorno e benvenuto :slight_smile: ,

essendo il tuo primo post nella sezione Italiana del forum, nel rispetto del regolamento di detta sezione (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO

... poi, in conformità al suddetto regolamento, punto 7, cortesemente edita il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone a forma di piccola matita :pencil2: che si trova in basso del tuo post), seleziona la parte di codice e premi l'icona </> nella barra degli strumenti per contrassegnarla come codice. Così com'è non è molto leggibile ... assicurati di aver correttamente indentato il codice nell'IDE prima di inserirlo (questo lo si fa premendo ctrlT su un PC o cmd T su un Mac all'intero del IDE). Grazie.

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread e sistemato il codice come da regolamento, nessuno ti potrà rispondere, quindi ti consiglio di fare il tutto al più presto. :wink:

1 Like

Ah ... dimenticavo ... nella sezione in lingua Inglese, si può scrivere SOLO in Inglese ... quindi, per favore, la prossima volta presta più attenzione in quale sezione metti i tuoi post; questa volta esso è stato spostato, da un moderatore della sezione di lingua Inglese, nella sezione di lingua Italiana ... la prossima volta potrebbe venire direttamente eliminato :roll_eyes:

Guglielmo

ok, scusate ancora, farò più attenzione.

Si, ma ... stiamo aspettando la presentazione nell'apposito thread (come indicato nel mio primo post). Perché è richiesta è ben spiegato nel REGOLAMENTO (punto 16.7) :wink:

Guglielmo

Ciao Guglielmo, ho provveduto a scrivere la presentazione nell'apposito thread, grazie ancora per le dritte che mi hai dato.

Leonardo

Allora, il problema che stai riscontrando è dovuto al fatto che, purtroppo, molti hanno scritto librerie per gli LCD su I2C e ... tutti hanno avuto la bella idea di chiamarle con lo stesso nome.

Ad esempio, il metodo begin(), in alcune esiste, in altre no, e così via ...

Noi qui consigliamo sempre di buttare via quella libreria ed usare quella che puoi scaricare (oltretutto appena aggiornata con nuove funzionalità) da QUI ... per l'uso guarda gli esempi che troverai allegati, ma, comunque, i metodi dovrebbero essere molto simili, se non uguali ... :wink:

Guglielmo

Ciao Guglielmo, ho provato a cambiare libreria con quella da te suggerita e purtroppo riscontro lo stesso problema, non ho davvero idee su cosa possa essere, grazie ancora.

Leonardo

@leonardo_nadali, come già ti ha suggerito Guglielmo, devi partire dagli esempi specifici della libreria che stai usando e non da del codice preso chissà da dove sperando che vada bene per le librerie che hai installato.

La libreria suggerita, cosi come quella che usavi prima, non ha il metodo begin() quindi è normale che se ce lo metti ti da errore, sarebbe strano il contrario.
Per inizializzare l'hardware devi chiamare il metodo lcd.init()

Esempio: HelloWorld.ino

Grazie mille cotestatnt :grinning: