Go Down

Topic: Libreria U8glib e picture loop (Read 601 times) previous topic - next topic

the_dragonlord

Oct 13, 2017, 08:42 am Last Edit: Oct 13, 2017, 09:07 am by the_dragonlord
Ciao a tutti, domani inizerò a cimentarmi nella realizzazione del mio progetto di un doppio controllore di temperatura per due camere di fermentazione per la mia birra. Il tutto sarà basato su un Arduino UNO R3 il quale mediante letture delle temperature di due sonde DS18B20 andrà a comandare una scheda a 4 relè. La GUI sarà gestita da un display QC12864B con controller ST7920 e la realizzazione sarà effettuata mediante la libreria in oggetto. Studiando e leggendo ho visto che per realizzare il tutto è necessario quello che su diversi forum americani è chiamato picture loop e cioè la parte di codice:
Code: [Select]

loop(){
u8g.firstPage();
do{draw();
} while (u8g.nextPage() );

Da quello che ho letto tale ciclo DO-WHILE è necessario per poter "disegnare" sul display utilizzando il meno possibile della RAM di Arduino utilizzando una cache del controller (spero di non aver capito fischi per fiaschi). FIn qua tutto bene.
Nel mio progetto ci sarà una videata principale con le misurazioni rappresentate sia in formato "testuale" che in formato grafico, nella parte inferiore vi saranno dei "bottoni" che permetteranno di far partire la gestione di una o entrambe le camere di fermentazione oppure di accedere alle pagine di setup delle singole camere stesse. La navigazione verrà effettuata tramite encoder.
Ecco lo schema;

Il mio dubbio è relativo proprio al picture loop nel senso che io immagino ovviamente debba essere lanciato ad OGNI variazione dei dati visualizzati ma, ferma ogni variazione è comunque necessario ridisegnare in continuazione le videate stile refresh delle vecchie TTL? In caso positivo tale operatività non "inginocchierebbe" Arduino rallentandolo in modo porporzionale alla complessità delle videate stesse? Io pensavo di fare il refresh (o ridisegno che dir si voglia), solamente quando necessario per cui, ad esempio, al variare delle temperature nella finestra principale e/o dell'utilizzo dell'encoder in ogni videata. Può andare secondo voi? Non mi è davvero chiaro (mea culpa) se le videate persistono nel display anche senza ridisegno continuo oppure no (scusate la cretinaggine di quanto esposto).
Sempre nella mia analisi del progetto l'encoder sarà gestito mediante interrupt ed in funzione della videata in cui ci si trova andrà ad impostare dei flag/incrementare o decrementare dei valori che successivamente devieranno il flusso della loop() per l'impostazione o memorizzazione su EEPROM.

Sono sulla strada giusta o sono totalmente fuori strada?
Grazie per ogni chiarimento
Andrea

SukkoPera

#1
Oct 13, 2017, 10:35 am Last Edit: Oct 13, 2017, 10:36 am by SukkoPera
La mia esperienza con questa libreria dice che la cosa più semplice è far girare il picture loop a ogni iterazione del loop() e disegnare tutto quanto serve. Questo non inginocchia Arduino, perché la libreria è progettata proprio per funzionare così, quindi è ottimizzata per questo tipo di utilizzo. Tutto il resto complica la vita senza portare più di tanti benefici.

Qua puoi vedere un mio progetto in cui la uso più o meno come vuoi fare tu (schermate di stato + menù), che ha una buona reattività anche su un Arduino a 8 MHz: https://github.com/SukkoPera/MyTrackr/blob/master/MyTracker.ino.
"Code is read much more often than it is written, so plan accordingly. Design for readability."

Guida rapida a ESP8266: https://goo.gl/kzh62E

the_dragonlord

Grazie! Darò senz'altro un'occhiata allo skecth

Go Up