Buonasera a tutti
sto lavorando ad un progetto per la lettura di un contatore gas tramite l' uscita impulsiva del correttore elettronico.
Qundi sto realizzando un semplice contatore che incrementa di un unità ( 1 mq x imp.) una variabile.
Il mio problema sta nel fatto che dovrei impostare il valore di partenza di una variabile long a 9 cifre
utilizzando un encoder rotativo con relativo pulsante.
Vorrei però riuscire a modificare le singole cifre in quanto è improponibile incrementare di una unità tale numero fino ad arrivare a 000999999 (per esempio).
Chi di voi ha qualche idea? l' unica cosa che mi è venuta in mente è quella che alla pressione del pulsante incremento via via l' unità da sommare alla variabile di 10, 100, 1000, 10000,.....,1000000000 la rotazione dell' encoder incrementa o decrementa il dato.
non sono certo di essermi spiegato bene spero abbiate capito anche se la cosa sembra alquanto laboriosa.
saluti e benvengano suggerimenti
ciao,
e come faresti a visualizzare la variazione del valore?...stampi su LCD?..altro?
una long ha 10 cifre...11 se conteggi il segno (-2,147,483,648 to 2,147,483,647)...ti servono anche i valori negativi?
ad ogni modo...potresti usare un array di 10 byte; un byte per cifra; con pulsante iteri nell'indice dell'array; incrementi da 0 a 9 e casomai passi da 9 a 0 il singolo byte; ad ogni variazione od a conferma "importi" il valore dei byte dell'array nella long...però dovresti anche fare in modo da verificare se il valore impostato è nel range della long.
Crea una variabile che ad ogni pressione la moltiplichi X 10 (moltiplicatore)
Poi utilizza questa formula:
tuaVariabile += moltiplicatore * variazioneEncoder
Ricordando di riportare a 1 il moltiplicatore quando raggiunge il massimo delle cifre + 1.
Dovrebbe funzionare!
Grazie delle risposte
Sto utilizzando un TTGO LORA32 OLED V1 quindi stamperei su oled da 0.96", avevo pensato all' array ma non so come posso passare da long ad Array e viceversa non ho molta esperienza con gli array. che funzioni posso usare per il passaggio long array array long?
la soluzione di Savoriano penso sia anc'essa percorribile inoltre dovrebbe occupare meno memoria anche se non ho problemi con 4mb.
provo a scrivere due righe vediamo cosa salta fuori
c'è una questione "estetica" da definire...tu vuoi variare una singola cifra alla volta cioè da 0 a 9 e poi nuovamente a 0 senza che la cifra successiva venga modificata o ti va bene che il 9 diventi 10 cioè 0 sulla cifra dove stai puntando ma +1 sulla successiva?
Secondo me trattandosi di regolare le cifre di un contatore è più sensato che ogni cifra venga regolata a sé stante senza interferire sulle altre. Appoggio l'idea dell'array. Ad ogni clic si avanza con la cifra da modificare e l'ultimo clic aggiorna il vero contatore. Si può anche fare un abbandono della modifica con una pressione lunga o timeout 60 secondi.
La conversione si ottiene per resti e divisioni per 10 (contatore -> array), e moltiplicazioni per 10 e somme (array -> contatore).
Penso che la soluzione dell'array ha più' classe e sopratutto più' intuitiva.