menù su LCD con indicatori di navigazione

Salve a tutti, ho deciso di pubblicare questo mio sketch, ricco di commenti e spero autoesplicativo, sperando possa tornarvi utile

Obiettivo: creare un menù su LCD con sistema di navigazione che mi faccia capire dove mi trovo e in che direzione posso spostarmi. Per far ciò utilizzo le librerie di Wiring che è l’ambiente di sviluppo open-source per microcontrollori, di cui fa parte proprio arduino.

  • Questa è la truttura del menu che voglio creare*

  • File Sketch*

  • Nuovo Importa Lib*

  • Apri LCD*

  • EEPROM*

  • Esplora*

Per prima cosa ho scaricato tutte le librerie di wiring (solo pochi MB).

da dove ho estrapolato la libreria Menubackend importandola nel mio sketch.
qui trovate il reference: MenuBackend \ Libraries \ Wiring

Vediamo xò prima qualche risultato: (scusate la risoluzione ma attualmente non ho mezzi migliori)

Nel mio caso utilizzo un vecchio telecomando riciclato da un lettore divx per poter accedere/uscire al/dal menù e spostarmi tra le varie voci e selezionarle:

Tuttavia è possibile navigare direttamente lanciando i comandi da serial monitor.
Da notare che se non sono nel menù i tasti di navigazione del telecomando, eventualmente premuti accidentalmente non hanno alcun effetto. Ciò per questioni di sicurezza. Molte volte questi menù servono ad impostare il valore di variabili in uso.
Provate ad immaginare cosa potrebbe accadere se accidentalmente venisse cambiata una variabile del nostro Sketch mentre viene eseguito.
La pressione del tasto Play sul telecomando o l’immissione della lettera ‘e’ tramite seriale seleziona/usa la voce visualizzata.
Le azioni associate ad ogni voce vengono gestite nella funzione: void menuUseEvent(MenuUseEvent used)
Nel caso mi trovi nella voce principale (Fike o Sketch) l’effetto sarà quello di entrare nel sottomenù relativo; negli altri casi visualizzo:"uso: " e il nome della voce selezionata. Ovviamente possiamo sotituire con le azioni che vogliamo far compiere.
Non voglio dilungarmi troppo anche perchè credo il codice sia abbastanza autoesplicativo, se qualcuno ha qualche dubbio/domanda, sarò felice di rispondere e confido in suggerimenti.
Ecco il codice:

menu_di_base.txt (9.22 KB)