RISOLTO Non riesco a sistemare il refresh display 1602

Buongiorno a tutti,
sto diventando matto con il refresh del display del mio progetto …

Riassumo brevemente: ho 2 dispositivi che parlano tramite nrf24l01
Encoder è appunto un encoder rotativo che manda il valore letto ad un display che lo visualizza in remoto.
Ho la necessità di impostare alla prima accensione un valore di offset dal display il quale viene memorizzato su encoder che poi lo somma all’angolo letto.
Se la connessione non va deve dirlo, se encoder viene spento deve chiedere dinuovo di inserire l’offset.

Tutto sembra funzionare bene ma ho un problema col display 1602:
quando visualizza l’angolo letto, il display " pulsa " e mi appare ogni tanto la scritta che ho impostato per quando non ha segnale. è come se ogni tot cicli di refresh mi mettesse un “check encoder” come se non avesse segnale.

Francamente ho usato tutte le frecce al mio arco ma non ne vengo fuori …

Un’altra cosa “strana” è che per uscire dalla procedura di offset una volta impostato il valore, devo premere 2 volte il pulsante ok … ma questo è un altro problema. :slight_smile:

Per chi avesse piacere ho messo i files sul mio Github

Non allego la parte relativa all’encoder perchè quella funziona come deve, i problemi stanno nel display.
Grazie 1000.

DISPLAY.ino (12.6 KB)

Ti pulsa perché ad ogni ciclo di loop scrivi sul display l'angolo, dovresti memorizzare l'ultimo valore scritto sul display in una variabile e, se il valore attuale non è cambiato rispetto a quello scritto sul display, evitare di aggiornare il display.
Per l'altro problema puoi prevedere di mostrare l'assenza di comunicazione se radio.available da false almeno N volte di seguito, in questo modo in caso di una temporanea indisponibilità non visualizzi il messaggio di check, quando ricevi i dati azzeri sempre la variabile così in caso che perdi la connessione all'ennesimo tentativo lo segnali, a te scegliere qual'é il numero corretto di mancata ricezione prima di dare il messaggio.
Il problema del doppio ok dipende probabilmente dal codice di antirimbalzo che con un condensaroe e una resistenza di eviti e rendi il codice più pulito

Ciao Fabpolli,
avevo provato a mettere una variabile da aggiornare ad ogni nuovo valore ma non mi aveva aiutato.
adesso ho tolto i display.clear e/o le righe vuote che mettevo per pulire e ridisegno ad ogni ciclo solamente il valore dell'angolo. Così ho praticamente risolto il discorso visualizzazione e si è anche sistemato quello della visualizzazione della mancata connessione ... ma lo sistemerò meglio come da tuo consiglio appena risolvo il resto ... in fin dei conti ora è decente :slight_smile: .

mi resta il problema dell'offset.
Non credo sia un problema di codice perchè in altre applicazioni funziona,
ho paura che sia un problema di timing tipo che quando la procedura finisce e manda il bite Ack.offsetimpostato all'encoder, questi non fa in tempo a processarlo e rimanda la richiesta cmq ...
proverò a lavorare li.

Cmq grazie 1000 del supporto, mi hai dato ottimi spunti per dove ricercare gli errori.

Buongiorno,
Grazie ai suggerimenti di Fabpolli ho risolto i problemi:
ho aggiunto del codice per il refresh del display ed ora non flasha più
per il discorso del pulsante premuto 2 volte non ho trovato il motivo
ma ho risolto mettendo una doppia condizione aggiungendo una variabile che parte a 0 e diventa 1 durante il processo offset, in tal moto al prossimo giro, trovandola ad 1 non entra dinuovo in offset.

Per la questione messaggio errore radio ora è ok anche quella anche se con un poco elegande delay() ...
Con più calma sistemerò pure quello.

Chi fosse interessato trova il codice sul github.

Grazie 1000 del supporto.