[RISOLTO] Uscire dal menu

Ciao a tutti

Purtroppo, qualche volta ancora mi incarto con i menu... Ho un menu con delle impostazioni che faccio tranquillamente in un loop ristretto, tanto poi se i parametri sono cambiati bisogna comunque azzerare e ripartire con i conteggi. Il problema è che non so come uscire fuori dal menu una volta che ho fatto le impostazioni: se entro in tic_on_off, per esempio, finito l'impostazione, premendo il pulsante dell'encoder la confermo e dovrei tornare al loop... Purtroppo mi sembra proprio di non potermela cavare con un return... Mi potete aiutare?

Grazie
Gianluca

#define PREMUTO  (!(PINC&0b00000001))
#define NONPREMUTO (PINC&0b00000001)

void loop()
{
// Serial.print("cont_max= "); Serial.print(cont_max); Serial.print("   cont="); Serial.println(cont);
if PREMUTO {menu();} // Se il pulsante è premuto, salta al menu.
...
}

void menu()
{
if(bip_on) bip();
print_menu();
while PREMUTO; // Attende che venga lasciato il pulsante.
while NONPREMUTO
  {
  encoder();
  if((E==1 && cod_menu<4)  ||  (E==-1 && cod_menu>1))
    {
    cod_menu+=E; // E=0 sta in encoder().
    print_menu();
    }
  } // END NONPREMUTO: viene premuto il pulsante.
switch_menu();  // Salta all'impostazione tramite uno switch/case, poi ritorna
                // qui e dovrebbe tornare al loop, invece resta nel menu.
}

void print_menu()
{
lcd.clear(); lcd.print("      Menu      ");
lcd.setCursor(0,1);
switch(cod_menu)
  {
  case 1: lcd.print (F("1 T. d'integraz."));
  break;
  case 2: lcd.print (F("2 Tic  On/Off    "));
  break;
  case 3: lcd.print (F("3 Bip  On/Off    "));
  break;
  case 4: lcd.print (F("4 Test On/Off    "));
  break;
  }
}

void switch_menu() 
{
switch(cod_menu) // Chiama la funzione di impostazione.
  {
  case 1: t_integr();   // Stato in EEPROM(1)
  break;
  case 2: tic_on_off(); // Stato in EEPROM(2)
  break;
  case 3: bip_on_off(); // Stato in EEPROM(3)
  break;
  case 4: test_on_off();// Stato in EEPROM(4)
  break;
  }
}

void tic_on_off()
  {
  lcd.clear(); lcd.setCursor(6, 0); lcd.print("Tic");
  while PREMUTO; // Attende che venga lasciato il pulsante
  while NONPREMUTO // Continua a leggere l'encoder finché non premo
    {
    encoder();
    if(tic_on==0 && E==1) {tic_on=1;}
    else if(tic_on==1 && E==-1) {tic_on=0;}
    else noTone(7);
    lcd.setCursor(6, 1);
    if(tic_on) lcd.print("On "); else lcd.print("Off");
    }
  EEPROM.update(2, tic_on); // EEPROM.update scrive solo se il valore è diverso da quello corrente.
  }

Risolto: il problema non era uscire, ma non rientrare immediatamente dopo, in quell'istante in cui il pulsante era ancora premuto:

void loop()
{
// Serial.print("cont_max= "); Serial.print(cont_max); Serial.print("   cont="); Serial.println(cont);
if PREMUTO {menu();} // Se il pulsante è premuto, salta al menu.
while PREMUTO; // Attende che venga lasciato il pulsante, altrimenti al prossimo giro rientra nel menu!
...
}