Dovrei gestire tutto con 2 grosse funzioni da chiamare una per gestire il display/led/tastiera, una per gestire le "scadenze" programmate.
No, le funzioni le dividere come di seguito:
Tasti direzione
Tasti funzione
"scadenze" programmate
display e led
Due grosse funzioni sono da evitare in Super Loop, si preferisce creare tante funzioni piccole che ritornano rapidamente al loop principale.
I tempi saranno condizionati dal momento in cui devo attivare dei relé in maniera impulsiva... e (se ho capito bene la questione) a meno che non sposti nella parte hardware la generazione dell'impulso devo comunque inserire nello sketch un delay(xx)...
Forse si potrebbe provare a contare i millisecondi tra una chiamata e l'altra della funzione di gestione dei relé, che chiamata di continuo, dopo aver contato tot millisecondi riapre il relé che ha chiuso precedentemente (spero di essermi spiegato).
Entrambe le opzioni sono praticabili, considera però che un delay(time) è una chiamata a funzione che può solo essere interrotta da una IRQ (ad esempio un dato nel buffer hardware genera una IRQ), ma il loop viene rallentato tot time value.
Una domanda: quanto è "lento" un bus I2C?
Nel senso se nel loop devo aggiornare il display e ricavare dal modulo RTC l'ora e la data, quanto "tempo" perdo? c'è modo di calcolarlo?
Il modo per calcolarlo c'è quando scrivi di tuo pugno tutto il codice orientato alla applicazione specifica, mentre quando usi librerie già pronte conviene ricavare i tempi di risposta impiegando codice sperimentale ed uno oscilloscopio.
La velocità del bus può essere selezionata: standard 100 kbit, full speed 400 kbit e fast mode 1 mbit. La maggior parte dei device I2c può lavorare con le prime due, inoltre l'ATmega non supporta il fast mode.
Considera che puoi anche scrivere codice che invia un carattere via I2c e ritorna al chiamante il quale esegue i task critici per poi richiamare nuovamente il task I2c e via di seguito fino a che ci sono dati da inviare via i2c, come risultato al massimo osserverai un ritardo in ciò che appare sul display.
Una domanda che ti dovresti fare è la seguente: Qual'è il tempo di reattività critico? e quali task coinvolge?
Solitamente si desidera reattività nella gestione della tastiera specie con i tasti direzione, ma non so se è il tuo caso.
Ciao.