Salve, volevo realizzare un semplice grafico con la libreria in oggetto, nulla di che, assi X e Y e grafico a linee con l'andamento degli ultimi n periodi della temperatura misurata. Ho cercato qualche libreria che avesse già qualcosa di utilizzabile ma ho trovato solo cose fin troppo complicate per le mie necessità per cui alla fine proverò ad arrangiarmi... volevo chiedere consiglio sul modo migliore per memorizzare le famose n ultime rilevazioni, dove n è un parametro settabile da me... pensavo alla scrittura su sd ma poi non saprei come fare a leggere "dal basso" del file gli ultimi n record... qualche suggerimento?
grazie
Andrea
Dipende quanti sono questi N e di che tipo di dato parliamo.
Arduino Uno (Atmega328) ha solo 2 Kb di SRAM, Potrebbero stare anche li dentro in un semplice vettore/array. Se sono byte 0-255 1 cella = 1 byte se sono int 1 cella = 2 byte etc.
ciao, parliamo di al massimo un centinaio di valori... la dallas credo restituisca un float ma a me interessa massimo una precisione di un decimale per cui per assurdo potrei anche convertire in una stringa di 3 byte...
... più semplicemente, se ti interessa SOLO un decimale, allora puoi convertire in "int" (prendi il float, lo moltiplichi per 10 ed hai il tuo "int" in cui le unità sono i decimi di grado e le decine e centinaia i gradi) occupando solo 2 bytes per valore.
float fTemp;
int iTemp;
...
...
iTemp = (int)(fTemp * 10.0);
...
Se ti interessano 100 valori, te la cavi con un array di 100 "int" per un occupazione di 200 bytes ![]()
Guglielmo
scusa, ma essendo un grafico dubito che si possa ad occhio percepire il decimale della temperatura (che risoluzioni video usi?), tanto vale utilizzare un byte per salvare la temperatura e hai 100 byte risparmiati rispetto all'uso di int
-zef-:
scusa, ma essendo un grafico dubito che si possa ad occhio percepire il decimale della temperatura (che risoluzioni video usi?), tanto vale utilizzare un byte per salvare la temperatura e hai 100 byte risparmiati rispetto all'uso di int
Questo non è detto ...
... magari gli interessa solo un intervallo ristretto di temperatura, ma con un decimale ![]()
Guglielmo
gpb01:
Questo non è detto ...
... magari gli interessa solo un intervallo ristretto di temperatura, ma con un decimaleGuglielmo
Esatto Guglielmo, è proprio così! A me interessa il range che va da +4° a +25°C per cui il decimale lo "apprezzo". Se posso volevo chiedere un'altra cosa. Il mio grafico sarà "dinamico" nel senso che una volta che verrà raggiunto il massimo numero di intervalli in asse X rappresentabili, al successivo caricamento tutto il grafico dovrà eseguire uno shift a sinistra per far posto al nuovo valore. Guardando nei metodi della UTFT non ho visto la possibilità di eseguire una sorta di animazione, quindi penso che l'unica strada percorribile sia quella di "cancellare" l'intera area del grafico e ridisegnarlo da zero con il nuovo valore che a questo punto sostituirà il vecchio primo valore. E' giusto così o c'è un altro metodo migliore e/o più performante?
Grazie
Andrea
Purtroppo il solo modo per "animare" un display grafico è cancellare tutta l'area da aggiornare e scriverla nuovamente, nel tuo caso conviene cancellare solo i punti già disegnati, accedendo ai singoli pixel, e riscriverli shiftati di uno verso sinistra in modo da poter inserire il nuovo punto.
Il controller presente su i display grafici, non di tipo smart, normalmente usati con Arduino non prevede operazioni in automatico su aree del display, permette solo l'accesso ai singoli pixel e poche altre cose, tutto il "lavoro sporco" lo fa la utft che si occupa di aggiornare i vari singoli pixel come richiesto dalla funzione utilizzata.
Tieni presente che un Atmega 8 bit non riesce ad aggiornare velocemente un display 320x240, se lo cancelli tutto e ridisegni tutto avrai un pesante flickering molto fastidioso da vedere.
astrobeed:
Purtroppo il solo modo per "animare" un display grafico è cancellare tutta l'area da aggiornare e scriverla nuovamente, nel tuo caso conviene cancellare solo i punti già disegnati, accedendo ai singoli pixel, e riscriverli shiftati di uno verso sinistra in modo da poter inserire il nuovo punto.
Il controller presente su i display grafici, non di tipo smart, normalmente usati con Arduino non prevede operazioni in automatico su aree del display, permette solo l'accesso ai singoli pixel e poche altre cose, tutto il "lavoro sporco" lo fa la utft che si occupa di aggiornare i vari singoli pixel come richiesto dalla funzione utilizzata.
Tiene presente che un Atmega8 bit non riesce ad aggiornare velocemente un display 320x240, se lo cancelli tutto e ridisegni tutto avrai un pesante flickering molto fastidioso da vedere.
Infatti, è per quello che l'area del grafico è molto ridotta rispetto a quella totale. Grazie, hai confermato quello che pensavo
Andrea