Hola
Creo que antes de nada conviene hacer algunas puntualizaciones:
- La memoria EEPROM de tu Arduino tiene una vida minima, estimada por el fabricante, de CIEN MIL ciclos de borrado-escritura, por lo que no parece muy necesario complicarse la vida con memorias externas.
- El tiempo aproximado de escritura en esta memoria es de 3.3 milisegundos por cada byte, o dicho de otro modo en 1 segundo podrias escribir unos 300 bytes
- Cualquier otro sistema de guardar datos de forma no volatil (tarjetas SD u otros dispositivos externos) es muchisimo mas lenta, lo que provocaria que un corte de energia impidiese salvar datos en estos soportes.
- Las interrupciones, son un mecanismo muy eficiente de reaccionar ante los cambios externos.
Por todo esto quizas un método realista seria habilitar una interrupcion externa (por ejemplo la del pin 2) que, con la electrónica adecuada, nos diria cuando hay un corte o microcorte de tension, lo que nos llevaria a la ejecución de la rutina encargada de salvar el estado de tu máquina en la EEPROM, así como un indicador de fallo de tension.
Al reiniciarse de nuevo el Arduino la primera accion seria leer el indicador para saber si se reinicia tras un fallo de alimentacion o no, y realizar las acciones necesarias según el caso.
Para completar todo el sistema tendriamos que asegurar que desde que detectamos el fallo de tension hasta que realmente el Arduino deja de funcionar hay tiempo suficiente para guardar la informacion (3.3 mseg * numero de bytes a guardar), equipando algun condensador electrolítico que nos mantenga la tension durante ese tiempo. Por ejemplo uno de 4700 uF nos daria una autonomía de unos 120 mseg. es decir tiempo para salvar 120/3.3 = 36 bytes.
No sé si la idea te puede ser útil.
Saludos