Muchas gracias por concestar tan rápido!
Pongo una parte del código ya que es un poco extenso.
Una vez definidas las variables y algunas funciones entra el void loop(), como podeis ver, si el boton de encendido se aprieta (esta en PULLUP), se va ejecutando hasta llegar a apagar(). En realidad lo que hace es dejar el lcd en blanco y esperar de nuevo a que se apriete el boton encender.
He probado con void (*myReset) (void) = 0x0 colocado donde defino las variables; pero sigue sin resetearse del todo... la primera vez lo hace todo genial, la segunda se salta pasos... Y no entiendo lo de mandar a dormir al AVR.
void apagar(){
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Apagando sistema");
delay(1000);
lcd.clear();
digitalWrite(7,LOW);
myReset();
}
void loop() {
buttonStateEncendido=digitalRead(buttonPinEncendido);
if ( buttonStateEncendido == 0) {
if (salirMenu==0){
menu();
salirMenu=1;
};
if (salirMenu==1){
empezar();
final=1;
}
}
if (final==1){
apagar();
}
}
Muchas gracias!