Creare un menù 4 pulsanti con OLED SSD1306

Sono diversi giorni ormai che cerco invano su google una libreria con un esempio che mi permetta di creare un menù da visualizzare sul mio display comandato da 4 pulsanti.
Cosa mi consigliate?
Grazie

Nessuno che mi può dare qualche dritta? :-[

ciao,

non me ne intendo di questo display…ho trovato QUESTA libreria.
Certo è solo per i comandi “base”…che ti dovrai gestire nello sketch per crearti tu i menu…oppure…se pensi che userai spesso questo display per progetti diversi…creati tu una libreria che ti consenta di gestire vari menu…bella sfida per imparare.

Grazie per la risposta.
Il mio problema non è visualizzare i dati sul display. Per far questo ho trovato già diverse librerie più o meno complete.
Il mio problema è come creare i menù.
Ho trovato diversi sketch ma non riesco ad adattarli sulla oled.

ciao,

allora, immaginando di avere 4 pulsanti (su, giù, conferma, esci), a seconda di quanti sotto menù vuoi gestire, userei una o più variabili da incrementare con i tasti su e giù per decidere/verificare in che menù sono e quindi cosa mostrare a display; altre variabili gestite dai pulsanti conferma ed esci per entrare ed uscire nel/dal menù selezionato.
Ovviamente ogni variazione delle suddette variabili implica una riscrittura, parziale o totale, del display.
Di solito io uso i classici LCD 16x2 o i 20x4 ed i miei menù li gestisco in questo modo.

Non avresti per caso qualche sketch di esempio da adattare?
Grazie

ciao,

al momento posso allegarti un progettino su cui stavo lavorando tempo fa, messo temporaneamente in pausa, nel quale gestisco, in fase di setup, alcuni menu per impostazioni varie.
come vedi ci sono un po’ di if e switch; se non ricordo male uso una sola variabile per fare i “salti” menù…cioè vario le decine per decidere i menù generici e le unità per i rispettivi sotto menù.
se può servirti…

DISPLAY_I2C.ino (8 KB)

Mai provata, ma c'e' anche questa libreria Link
e il forum link
e tra gli esempi c'è appunto anche l' SSD1306

Solo che una UNO non ha abbastanza memoria per gestire il tutto

Grazie proverò.

Mi sono accorto di non aver specificato quale sia il mio scopo del progetto.

Vorrei creare con una Wemos D1 mini un controllo con una sonda DS18B20 della temperatura di un acquario collegandoci un buzzer e e delle ventole di raffreddamento.
Per le ventole vorrei programmarle impostando io la teperatura di accensione e spegnimento e vorrei che un buzzer e dei led mi avvisano in caso di anomalia. Vorrei inoltre prevedere un tasto di snooze/quiet per azzittirlo a piacimento.
Se mi rimare memoria a sufficienza poi farò in modo di pubblicare i dati su Blynk o su Cayenne.

Ho optato per la Wemos in quanto un progetto simile ma meno completo (legge solo temperature e publica su blink) realizzato con una UNO ed un modulo WiFi va sempre in blocco. Visualizza i dati su LCD ma spesso bisogna resettarlo per avere i dati su blynk.
Grazie.

Ricordo sempre che questo è il forum di Arduino.cc dove si fornisce assistenza per problemi relativi a problematiche che coinvolgono Arduino, i suoi collegamenti e la sua programmazione.

Quindi, ben vengano domande che riguardano moduli ESP8266 collegati ad Arduino, ma domande per moduli che nulla hanno a che vedere con Arduino, prodotti da altri produttori che hanno semplicemente utilizzato/sfruttato l'IDE per sviluppare un loro "core" e facilitare la programmazione delle loro schede, come le schede WeMos, vanno poste sul forum di supporto delle WeMos.

Grazie.

Guglielmo

P.S.: Come vedete NON ho chiuso il thread, ma ... non esagerate eh ... :wink:

Vorrei creare con una Wemos D1 mini un controllo.........

Sicuro di starci dentro, con il numero dei pin a disposizione ?

Oled SSD = 4 pin se SPI o 2 pin se I2C
Pulsanti per menu = 4 pin
DS18B20 = 1 pin
Buzzer = 1 pin
Ventola = 1 pin
Led = 1 pin
Tasto Snooze = 1 pin

brunello22:
Sicuro di starci dentro, con il numero dei pin a disposizione ?

Oled SSD = 4 pin se SPI o 2 pin se I2C
Pulsanti per menu = 4 pin
DS18B20 = 1 pin
Buzzer = 1 pin
Ventola = 1 pin
Led = 1 pin
Tasto Snooze = 1 pin

In teoria dovrebbero essere proprio tanti quanto me ne servono, considerando che per il tasto snooze avevo in mente di usare uno o tutt'e quattro di quelli del menu' e che l'oled voglio usarlo via I2C (ed è qui che incontravo anche diverse problematiche di programmazione).

gpb01:
P.S.: Come vedete NON ho chiuso il thread, ma ... non esagerate eh ... :wink:

Ti ringrazio per aver lasciato aperto il post.
Avevo volutamente chiesto aiuto sul codice in generale senza menzionare la wemos (tra l'altro scelta da me SOLO per una questione di contenimento dei costi. Prendere una board con wifi è indubbiamente molto piu' onerosa.)

Spero di non aver contravvenuto nessuna regola del forum, se così fosse ti prego di eliminare prontamente questo mio intervento. :wink:

brunello22:
Mai provata, ma c’e’ anche questa libreria Link
e il forum link
e tra gli esempi c’è appunto anche l’ SSD1306

Solo che una UNO non ha abbastanza memoria per gestire il tutto

Ho provato la lbreria e gli esempi specifici dell’SSD1306 ma non riesco a cavarne un ragno dal buco in quanto il mio OLED non è della Adafruit e non riesco ad adattarlo.
Il mio è questo: LINK OLED

Sto anche provando la libreria MenuBackend seguendo il tutorial di coagula
link coagula
però anche modificando la riga 195 come da suo suggerimento non riesco a compilarlo. :frowning:

ziopippo:
Ho provato la lbreria e gli esempi specifici dell'SSD1306 ma non riesco a cavarne un ragno dal buco in quanto il mio OLED non è della Adafruit e non riesco ad adattarlo.
Il mio è questo: LINK OLED

Al link di coagula, il display è un semplice lcd testuale a 2 righe !?!

Ho un display simile e con le librerie SSD1306 funziona.
Però l'immagine e quello che dichiarano in quel link è BEN diverso. Il display in foto usa protocollo I2C (Sda e Scl) mentre la descrizione è per un display SPI. Quel display economico c'e' sia versione I2C che SPI. Quale hai ?
Se hai quello I2C verifica con lo sketch I2CScanner collegando il display qual'é l'indirizzo I2C.
Nella libreria Adafruit dentro a Adafruit_SSD1306.h viene fissato #define SSD1306_I2C_ADDRESS 0x3C
Se il display ha altro indirizzo DEVI modificare la libreria.
Inoltre sempre in quel file .h viene fissato il tipo di display a 128x32, devi cambiare se il tuo è 128x64:
// #define SSD1306_128_64
#define SSD1306_128_32
// #define SSD1306_96_16

P.S. per quel display c'e' anche la libreria GitHub - olikraus/u8glib: Arduino Monochrom Graphics Library for LCDs and OLEDs
che a me pare più leggera di quella di Adafruit.

Grazie per l'intervento.
Credo di avere la versione I2C con indirizzo 0x3c (usando alcune librerie con questo indirizzo riesco a scrivere sul display) infatti l'output dello scanne indica

Scanning...
I2C device found at address 0x3C  !
done

la u8glib non me la compila e sono costretto ad usare la u8g2.

nid69ita:
Inoltre sempre in quel file .h viene fissato il tipo di display a 128x32, devi cambiare se il tuo è 128x64:
// #define SSD1306_128_64
#define SSD1306_128_32
// #define SSD1306_96_16

P.S. per quel display c'e' anche la libreria GitHub - olikraus/u8glib: Arduino Monochrom Graphics Library for LCDs and OLEDs
che a me pare più leggera di quella di Adafruit.

Ecco perchè mi dava errore di compilazione la Adafruit! :frowning: :wink:

Preferirei anche io usare la u8g2 ma non riesco a trovare un menù che ci si adatti :frowning:

Ora la libreria non da errori di compilazione ma caricando lo sketch dell’esempio ssd1306_128x64_i2c non mostra nulla sul display.
Ovviamente nello sketch ho modificato la riga 61 da 0x3D a 0x3c

Se sei sulla Uno è meglio che usi la u8glib, u8g2 consuma più risorse.

Credo comunque che a questo punto il menù fai prima a fartelo da solo, evidentemente di librerie affidabili adatte allo scopo non ce ne sono.

Non sono sulla uno come ho già scritto nelle pagne precedenti (ed evito di ripeterlo altrimenti rischio la chiusura del post... :wink: )
In ogni caso la u8glib mi appare nella lista degli esempi come INCOMPATIBILE (e non ne capisco il motivo).

Sto riuscendo ad intravverere qualche spiraglio con la lbreria LCDMenuLib.h ma devo ancora capire come "settare" 4 pulsanti invece che 6 :wink:

Buongiorno,
la libreria LCDMenuLib.h è completa, mi funziona, ed è anche molto bella ma, per le poche voci di menù che servirebbero a me credo sia troppo pesante.

Nessuno saprebbe indicarmi come crearne una da me? Ho letto diversi articoli ed esempi ma ho difficoltà a capire come procedere perchè ogni esempio letto ha un problema di adattamento alle diverse librerie funzionanti per il mio oled.