Vorrei affrontare un "problema" che finora ho tralasciato, non riuscendo a capire come bisogna fare. In rete c'è un esempio molto semplice ripetuto innumerevoli volte, ma non riesco ad applicarlo in pratica, così mi sono arrangiato a fare un'impostazione in un menu scrivendo "Cent.", poi "Dec." e poi "Un.", mentre avrei voluto mettere semplicemente una sottolineatura (fissa o intermittente) alla cifra che sto impostando: centinaia, decine o unità. Naturalmente avrei potuto semplicemente variare con l'encoder tra 1 e 999, però sapere come si fa mi sarà sicuramente utile in futuro.
Qualcuno mi può spiegare come si fa in pratica, o indicarmi un sito con un programma che lo usa praticamente? Ho provato ad inserire sia lcd.cursor/noCursor che lcd.blink/noBlink in una impostazione del contatore Geiger che ho progettato (hardware e software) e realizzato l'anno scorso, ma non ottengo i risultati sperati. Ho visto il rettangolo lampeggiare nella pagina principale, dove non avrebbe dovuto, e appena visibile in una posizione del display vuota, ma non sono riuscito a "domarlo"... >:(
Io non so se c'è una funzione apposita o se quello che vuoi fare tu è più sofisticato di quello che ho fatto io, che da ignorante ho fatto una cosa analoga ma da buon emanuense.
Dovevo modificare dei valori con dei pulsanti che selezionavano il valore e lo modificavano.
Il display lo riempio con una funzione che richiamo a tempo, es. ogni decimo di secondo, così se cambio qualcosa risponde rapidamente.
Poi ogni secondo inverto una variabile booleana.
Quindi stampo il testo su cui sto lavorando se la variabile "toggle" è true e stampo blank se false, così ottengo che mi lampeggia il valore che sto modificando.
Cerchi una cosa più avanzata o ti basta questo?
Nella mia ignoranza mi verrebbe da dire che siamo troppo a basso livello per avere funzioni di questo tipo.
Se fosse una funzione hardware, dovrebbe essere uno standard altrimenti si avrebbe solo su alcuni display.
Se implementate sulla libreria comunque mi sa che lavorano con lo stesso principio.
Comunque ora sono curioso anche io di sapere se esiste.
Alla fine non si finisce mai di imparare cose nuove.
A livello di controller c'è sia il modo di controllare il "cursore" che di fare il "blink" di un carattere ... è tutto descritto nel datasheet che allego
Appena ho un po' di tempo faccio una prova con la libreria per la gestione degli LCD e ti dico ...
Grazie, ORSO2001. Avevo provato una cosa molto simile, ma non ha funzionato e non ho capito perché: forse scrivendo un carattere sul cursore il cursore sparisce...
Grazie, Guglielmo. Anche dal datasheet, purtroppo, non si capisce come funziona esattamente in pratica, quali sono i limiti, che cosa non bisogna assolutamente fare... Speravo che fosse più facile trovare qualche programmino già collaudato da studiare.
Dovrei farmi un apparecchio di sviluppo con Arduino, dotato di LCD, encoder e qualche altra cosa per fare agevolmente delle prove senza fili volanti e senza doverle fare riprogrammando il povero Geigerino, che è il più disponibile a farsi manomettere...
Datman:
... un apparecchio di sviluppo con Arduino ...
Mi verrebbe da suggerirti una millefori doppioeuro (o almeno 200x300, anche se ti pelano 11 Euro) dove saldare degli header per infilarci arduino, e poi tutto il resto che ci vuoi mettere tu e connettori/header a piacere ... una cosa tipo questa arduino development board , pero' autocostruita, cosi invece di essere "legato" alla sola roba che ci mettono loro, puoi piazzarci quello che vuoi tu connesso ai pin che vuoi tu ...
La mia idea è un po' diversa: un contenitore di plastica con display lcd e 7 segmenti (i2c) ed encoder sul frontale e microcontrollore dentro con ponticelli affidabili, icsp e porta seriale scollegabile.
>Datman: ... mi ripeti esattamente cosa vuoi poter fare sul LCD? Vuoi poter posizionare il cursore in un certo punto? Vuoi farlo apparire e sparire? ... così provo a buttare giù un piccolo esempio ...
La storia del cursore lampeggiante l'ho già tirata fuori diverse volte, senza successo.
Il controller lo gestisce bene, è il problema del refresh delle schermate che "litiga" col cursore.
Se scrivi nel SETUP la classica frase "hello world", poi non hai nessun problema a far apparire il cursore lampeggiante nel LOOP, perche la scritta non viene più ripetuta.
Se invece sposti la stessa scritta nel LOOP vedrai che sfarfalla: questo perché il controller LCD risente del refresh della riga.
Da qui altri miei post su come gestire meglio le schermate LCD e cioè "scriverle" solo quando effettivamente c'è bisogno.
Sì: far lampeggiare il cursore sotto alla cifra su cui sta agendo l'encoder. Forse, però, la cosa più semplice è visualizzare alternativamente la cifra e uno spazio in base al resto di millis() diviso 1000. Variando il valore dell'if si può anche variare il duty cycle.
Le funzioni cursor() e noCursor() fanno un or ed un and bit a bit dell'ultima riga della "casella" dov'è posizionato il cursore...quindi 'basta " gestire la posizione del cursore...come faccio nell'esempio che ho postato.
Fa una cosa però, scarica la libreria che ti allego, studiati tutti i vari metodi che mette a disposizione e usa questa (... è quella modificata e manutenuta dall'utente "Testato")!