Presentazione progetto e primi dubbi

Visto che hai già materiale dentro è d'obbligo usarlo e alla fine quelli che hai elencato vanno bene. Tra I2c e SPI cambia il numero di pin necessari per ogni device connesso al bus, 2 soli fili per I2c e 3 per ISP più 1 per il chip select.

Quindi gestirai tutto con l'arduino Mega?

Controlla quanto memoria flash e ram occupa la gestione del display, così da sapere quanto ti puoi allargare con il codice di gestione generale.

La rogna può essere la gestione dei pulsanti, se devi scrivere un debounce software questo o viene complicato oppure impiega un certo tempo in cui il micro non può fare altro che aspettare. Gli interrupt a tempo o esterni sono comodi per la gestione di eventi che devono essere serviti subito, infatti il micro sospende quello che sta facendo e salta ad eseguire la routine di interrupt ed esce da questa dopo avere eseguito tutto il codice contenuto, in questo frangente il loop non gira e se premi un pulsante il software non se ne accorge. Per questo motivo il codice della routine di interrupt deve impiegare il minor tempo cpu possibile.

Per quanto riguarda la parte software ho già messo in conto di partire da una cosa molto basilare, del tipo: alla pressione di un tasto attivo una serie di relè e una serie di led, se ri-premuto li disattivo. Poi potrei aggiungere la regolazione dei pot digitali (ad esempio alla pressione di un altro tasto aumento il valore di un potenziometro che mi intensifica un certo effetto). Infine aggiungerei le funzionalità del display.

Devi mantenere in memoria lo stato attuale di ogni relè, ho usi una struttura (classe) o un array definendo delle #define come indici dell'array, tipo
#define IDX_RELE_BOOST 0
#define IDX_RELE_FLANGER 1
#define IDX_RELE_BYPASS 2
stateRele[10]

if (!stateRele[IDX_FLANGER])
stateRele[IDX_FLANGER] = 1;

ecc.

Aspetto lo schema a blocchi funzionali.

Ciao.