Que tal Miguel, no se si habrás solucionado el problema ya, pero viendo para que quieres el código yo te sugiero que lo hagas con interrupciones, de esta manera podrás dejar el micro dormido, o profundamente dormido.
No me acuerdo que micro estabas utilizando, pero mira si tiene deep sleep, te consumira en torno de nA, y con la posibilidad de que cuando tengas una interrupción, en este caso el flanco da lo mismo, que se reinicie el micro, su funcionamiento normal en deep.
De esta manera soló deberas poner las condiciones al principio del programa, despues el deep y ya esta. No hará falta que dejes el micro trabajando dentro de un while.
Lo único que no me acuerdo de cabeza si el deep sleep al entrar en el deja las salidas en el estado que estaban, sino en sleep consumira un poco más, unos 5 o 6 microA, y el sleep seguro que si que te deja el estado.
Salu2.