Salve,
Non so se il consiglio che le vorrei dare é utile, ma io personalmente (anche se non ho mai provato) se un circuito come il suo non funziona o ha problemi come in questo caso, farei un lavoro di questo tipo:
Dividersi le varie operazioni da fare su vari Arduino, si che ogni Arduino ne debba fare una soltanto (SD, convertitore, input...).
Aggiungerei nel giuoco un ulteriore Arduino, il cui unico scopo é di far comunicare attraverso un bus comune (diciamo via seriale) i vari Arduino a lui subordinati.
Tutti gli Arduino hanno un nome proprio (convertitore 'C', SD 'S'_ capo 'A'...) che va posto all'inizio di ogni messaggio. Ogni Arduino legge il bus appena c'é su qualcosa. La prima cosa che cerca é il suo "nome", che deve essere all'inizio del messaggio. Se lo trova allora continua a leggere, in caso contrario ignora. L'unica cosa che cerca in ogni caso é il carattere terminatore che resetta il primo controllo, così da poter ricevere un nuovo messaggio a lui destinato.
Se il messaggio é errato (il carattere destinatario non corrisponde ad alcun Arduino) allora interviene nuovamente il " capo" a svuotare io bus.
Credo che questo metodo possa andare, certo servono molti componenti, ma é l'unica soluzione che conosco