Programmkonzept allgemein

Für Siganle kannst du ext. Interrupts nehemen.
Hier Arduino Playground - MsTimer2
sind noch interne Interrupttimer der alls x ms (mininmum 1ms) ein Funktion aufrufen kann. Damit kannst du gut Zeitkritische Signale auswerten.
Ausserdem sollte man die Geschwindigkeit nicht unterschätzen (vorausgesetzt man nutzt keine delays). Ich habe ein Programm für den Arduino der mit SPI extern mit zwei MAX7221 spricht und einige Berechnungen macht ingeseamt 12kB Code und die Durchlaufzeit des Programms ist zwischen 600-900µs.
Ich würde sagen erstmal "so einfach" wie möglich alles in die Main loop packen und dann sehen ob man Sachen mit Interrupts machen muss. Mein Vorschlag für den Anfang. Der I2C ist ja auch nicht langsam mit seinen max 400kHz. Man konnte von 100 auf 400kHz in der lib umschalten. Korekktur war früher mal.
Gruß
Der Dani